【发布时间】:2020-02-27 07:27:58
【问题描述】:
如何从公钥/私钥对创建 RsaSecurityKey。我需要创建 JWT ID 令牌
方法中给出了我的示例键值对
public string GetIdTokenStringNew(Dictionary<string, object> inputClaims, string publicKey, string privateKey )
{
string result = null;
try
{
var tokenHandler = new JwtSecurityTokenHandler();
publicKey = @"-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANPCGYnVEa1jQPMSHXST8NVIrcAYZcWr
..............
-----END PUBLIC KEY-----
";
privateKey = @"-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBrzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIa3E4RUhvGGwCAggA
MB0GCWCGSAFlAwQBKgQQnfLhTMhpN7BE0A+viaWeWwSCAWD2yFBSGAP6boVzCOqg
41IoRHrZHgTQVbySuruav5nM3eMe3psHD0C4Tbyj4av3UnD2/ebZz8f9IiObJ45a
................................................................
....
-----END ENCRYPTED PRIVATE KEY-----";
List<Claim> claims = new List<Claim>();
foreach (var o in inputClaims)
{
string val = null;
if (o.Value != null)
{
Type t = o.Value.GetType();
bool isDict = t.IsGenericType /*&& t.GetGenericTypeDefinition() == typeof(Dictionary<,>)*/;
if (isDict)
{
val = JsonSerializer.Serialize(o.Value);
}
else
{
val = o.Value.ToString();
}
}
claims.Add(new Claim(o.Key, val));
}
var rsaParameters = new RSAParameters();// it should be from public /private key
var securitykey = new RsaSecurityKey(rsaParameters);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddSeconds(60 * 5),
SigningCredentials = new SigningCredentials(securitykey, SecurityAlgorithms.RsaSha256),
Audience = "....",
Issuer = "..."
};
var additionalheader = new Dictionary<string, object>
{
{ "kid", "***" }
};
tokenDescriptor.AdditionalHeaderClaims = additionalheader;
var token = tokenHandler.CreateToken(tokenDescriptor);
if (token != null && token is JwtSecurityToken)
{
result = (token as JwtSecurityToken).RawData;
}
}
catch (Exception ex)
{
}
return result;
}
【问题讨论】:
标签: jwt rsa .net-core-3.1