首页 > 解决方案 > 如何在 C# 中生成使用 RS256 算法签名的 JWT 令牌

问题描述

我有一个 RSA 私钥,我必须使用 RS256 算法生成一个 JWT 令牌。我从以下代码开始,该代码适用于“HmacSha256”算法,但是当我将其更改为 RS256 时,它会引发类似“IDX10634: Unable to create the 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;
}

标签: c#.netjwttoken

解决方案


推荐阅读