我正在尝试在ASP.NET 5 Web应用程序中进行oauth授权。我试过这个方法:
ASP.NET 5 OAuthBearerAuthentication: The following authentication scheme was not accepted: Bearer
它运行良好,但正如您所见,rsa密钥始终在启动时生成。正如我在其他主题中所见到的那样,RSACryptoServiceProvider.ToXmlString
和RSACryptoServiceProvider.FromXmlString
在DNX Core中不存在,我找不到任何其他方法(de)序列化我曾经生成的凭据。你能告诉我一个方法吗?
由于
答案 0 :(得分:4)
我刚刚将我的项目升级到ASP.NET Core RC2并遇到了这个问题,因为我从我的JWT令牌生成的配置文件中读取了我的RSA密钥(存储为XML)。
我最终创建了自己的方法扩展来替换我使用的ASP.NET 5 RC1。这是代码:
using System;
using System.Security.Cryptography;
using System.Xml;
namespace RSACryptoServiceProviderExtensions
{
public static class RSACryptoServiceProviderExtensions
{
public static void FromXmlString(this RSACryptoServiceProvider rsa, string xmlString)
{
RSAParameters parameters = new RSAParameters();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue"))
{
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
{
switch (node.Name)
{
case "Modulus": parameters.Modulus = Convert.FromBase64String(node.InnerText); break;
case "Exponent": parameters.Exponent = Convert.FromBase64String(node.InnerText); break;
case "P": parameters.P = Convert.FromBase64String(node.InnerText); break;
case "Q": parameters.Q = Convert.FromBase64String(node.InnerText); break;
case "DP": parameters.DP = Convert.FromBase64String(node.InnerText); break;
case "DQ": parameters.DQ = Convert.FromBase64String(node.InnerText); break;
case "InverseQ": parameters.InverseQ = Convert.FromBase64String(node.InnerText); break;
case "D": parameters.D = Convert.FromBase64String(node.InnerText); break;
}
}
} else
{
throw new Exception("Invalid XML RSA key.");
}
rsa.ImportParameters(parameters);
}
public static string ToXmlString(this RSACryptoServiceProvider rsa)
{
RSAParameters parameters = rsa.ExportParameters(true);
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
Convert.ToBase64String(parameters.Modulus),
Convert.ToBase64String(parameters.Exponent),
Convert.ToBase64String(parameters.P),
Convert.ToBase64String(parameters.Q),
Convert.ToBase64String(parameters.DP),
Convert.ToBase64String(parameters.DQ),
Convert.ToBase64String(parameters.InverseQ),
Convert.ToBase64String(parameters.D));
}
}
}
答案 1 :(得分:0)
CoreFX中的RSACryptoServiceProvider
看起来像ImportParameters
和ExportParameters
方法使用RSAParameters
结构反序列化/序列化。