如何在C#中生成用RS256算法签名的JWT令牌

时间:2021-05-24 05:52:20

标签: c# .net jwt token

我有一个 RSA 私钥,我必须使用 RS256 算法生成一个 JWT 令牌。 我从以下适用于“HmacSha256”算法的代码开始 但是当我将其更改为 RS256 时,它会抛出类似“IDX10634:无法创建 SignatureProvider.Algorithm: 'System.String',SecurityKey:'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey'”之类的错误

之后我用 RSACryptoServiceProvider() 类修改了代码。但我没有得到解决方案。 请任何人都可以帮助使用带有私钥的 RSACryptoServiceProvider 类的示例代码。

public static string CreateToken()//Dictionary<string, object> payload
{
    string key = GetConfiguration["privateKey"].Tostring();

    var securityKey = 
        new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(
            Encoding.UTF8.GetBytes(key));

    var credentials = 
        new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, "RS256");

    var header = new JwtHeader(credentials);

    JwtPayload payload = new JwtPayload();

    payload.AddClaim(
        new System.Security.Claims.Claim(
            "context", "{'user': { 'name': 'username', 'email': 'email' }}", 
            JsonClaimValueTypes.Json));
    payload.AddClaim(new System.Security.Claims.Claim("iss", @"app-key"));
    payload.AddClaim(new System.Security.Claims.Claim("aud", "meet.jitsi.com"));
    payload.AddClaim(new System.Security.Claims.Claim("sub", "meet.jitsi.com"));
    payload.AddClaim(new System.Security.Claims.Claim("room", "TestRoom"));

    var secToken = new JwtSecurityToken(header, payload);
    var handler = new JwtSecurityTokenHandler();

    var tokenString = handler.WriteToken(secToken);
    return tokenString;
}

0 个答案:

没有答案