我知道。我知道。大量与此确切标题相关的问题。但是在我看过的所有内容中,我找不到使用List<Claim>
,issuer
和audience
创建JWT的那个。
private string GetTokenString()
{
var claims = new List<Claim>()
{
new Claim("claim1", "foo-anything"),
new Claim("claim2", "bar-anything")
};
string keyValue = "1234567890qwertyuiopasdfghjklzxcvbnm"; // NOT THE REAL KEY (changed for this SO question)
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(keyValue));
var jwtToken = new JwtSecurityToken
(
issuer: "https://xxxxxx.net",
audience: "https://www.xxxxxx.com",
claims: claims,
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature),
expires: DateTime.Now.AddMinutes(30)
);
var handler = new JwtSecurityTokenHandler();
string tokenString = handler.WriteToken(jwtToken);
return tokenString;
}
然后,如果我拿tokenString
并将其插入https://jwt.io/,我会得到
无效签名
我创建JWT的方式有问题吗?
答案 0 :(得分:1)
查看签名密钥的base64编码
1234567890qwertyuiopasdfghjklzxcvbnm
出来就是这个
MTIzNDU2Nzg5MHF3ZXJ0eXVpb3Bhc2RmZ2hqa2x6eGN2Ym5t
请使用此值来验证生成的令牌,在这种情况下,应选中此复选框。
如果将复选框保留为空白,则使用与代码中相同的值。