在 C# 中添加 JWT 令牌单一声明属性作为数组元素

use*_*708 6 c# jwt

我想在 C# 中的 JWT 令牌中添加一个角色作为数组元素。

{
   "roles": ["Administrator"]
}
Run Code Online (Sandbox Code Playgroud)

目前,我使用此类代码来生成 JWT 令牌声明。这并不能帮助我创建数组类型的声明。

string PrivateKey = "string private here";
List<Claim> claims = new List<Claim>();
claims.Add(new Claim("roles", "[Administrator]"));
string tokenString = CreateToken(claims, PrivateKey);

public string CreateToken(List<Claim> claims, string privateRsaKey)
        {
.........................................................
                JwtSecurityToken token = new JwtSecurityToken(
                        Issuer,
                        Audience,
                        claims,
                        now,
                        Expiration,
                        null);

                string payload = token.Payload.SerializeToJson();
                return Jose.JWT.Encode(payload, rsa, Jose.JwsAlgorithm.RS256);

}
Run Code Online (Sandbox Code Playgroud)

实际上我只想添加一个数组元素。我不能这样做。因为它添加了多个数组元素。

List<Claim> claims = new List<Claim>();
claims.Add(new Claim("roles", "[Administrator]"));
claims.Add(new Claim("roles", "[Administrator]"));
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

use*_*708 4

最后,花了几个小时我找到了答案,我必须改变生成声明的方式并对 jwt 令牌进行编码

List < string > roleOptions = new List < string > () {
 "Administrator"
};
var payload = new JwtPayload {
 {
  "roles",
  roleOptions
 }
};

    string key = "eyJjb21wYW5pZXMiOlt7IklkIjoxLCJDb2RlIjoiQzAxIiwiTmFtZSI6IkNvbXBhbnkgSSIsIkJyYW5jaGVzIjpudWxsLCJVc2VycyI6W3siSWQiOjEsIk5hbWUiOiJV";
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
    var header = new JwtHeader(credentials);
    var secToken = new JwtSecurityToken(header, payload);
    var handler = new JwtSecurityTokenHandler();
    var tokenString1 = handler.WriteToken(secToken);
    _logger.Info(secToken.ToString());
    _logger.Info(tokenString1);
Run Code Online (Sandbox Code Playgroud)