我有一个用例,我希望我的新应用程序(这是身份验证的来源)为遗留应用程序提供JWT。
我正在尝试使用该软件包System.IdentityModel.Tokens.Jwt 5.0.0-beta7
(如果需要,我可以轻松转移到beta8
)。创建令牌很简单,但我在签名时遇到问题。这是我目前的代码:
Claim[] claims = {
new Claim(ClaimTypes.Email, "test@example.net"),
new Claim(ClaimTypes.Role, "admin"),
new Claim(ClaimTypes.Uri, ""),
new Claim(ClaimTypes.Expiration, DateTime.UtcNow.Add(TimeSpan.FromDays(1)).ToString()),
new Claim("personId", personId.ToString())
};
var key = Convert.FromBase64String("my super secret key goes here");
var signingCredentials = new SigningCredentials(
new SymmetricSecurityKey(key),
SecurityAlgorithms.HMAC_SHA256,
SecurityAlgorithms.Sha256Digest
);
var jwt = new JwtSecurityToken("localhost", "all", claims,
DateTime.UtcNow, DateTime.UtcNow.AddDays(1), signingCredentials);
var handler = new JwtSecurityTokenHandler();
handler.WriteToken(jwt);
return Content($"{handler.WriteToken(jwt)}");
如果我没有签署令牌,一切正常。但是,只要我添加签名凭据,就会收到不支持HMAC的错误。我找到了另一个SO帖子,上面写着support for symmetric keys does not yet exist。但是,在我的搜索中,我看到了图书馆的广泛使用。特别是,我看到InMemorySymmetricSecurityKey
的使用。但是,当我尝试自己使用它时,它无法在任何命名空间中找到,所以我有点困惑,因为我从这里开始。
这是一个冗长的解释基本上要问 - 如何用简单的秘密正确签署JWT?
答案 0 :(得分:3)
当我们迁移到新版本的CoreClr时,我们不得不暂时放弃对HMAC的支持。我们选择在RC1中添加对ECDSA的支持,并计划在RC2中添加HMAC。
抱歉麻烦。您可以添加自己的SignatureProvider或等待几周。