我想在 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)
我怎样才能做到这一点?
最后,花了几个小时我找到了答案,我必须改变生成声明的方式并对 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)
| 归档时间: |
|
| 查看次数: |
4687 次 |
| 最近记录: |