在 ASP.NET 中使用 System.IdentityModel.Tokens.Jwt 编码 JWT 令牌 5
Encoding JWT Token Using System.IdentityModel.Tokens.Jwt in ASP.NET 5
我有一个用例,我希望我的新应用程序(它是身份验证的来源)为遗留应用程序提供 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 post,上面写着 。但是,在我的搜索中,我看到了该库的广泛使用。特别是,我看到 InMemorySymmetricSecurityKey
的用法。但是,当我自己尝试使用它时,在任何命名空间中都找不到它,所以我对从这里去哪里感到有点困惑。
这是一个冗长的解释,主要是要问 - 我如何用一个简单的秘密正确地签署 JWT?
当我们迁移到新版本的 CoreClr 时,我们不得不暂时放弃对 HMAC 的支持。我们选择在 RC1 中添加对 ECDSA 的支持,并计划在 RC2 中重新添加 HMAC。
抱歉打扰了。您可以添加自己的 SignatureProvider 或等待几周。
我有一个用例,我希望我的新应用程序(它是身份验证的来源)为遗留应用程序提供 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 post,上面写着 InMemorySymmetricSecurityKey
的用法。但是,当我自己尝试使用它时,在任何命名空间中都找不到它,所以我对从这里去哪里感到有点困惑。
这是一个冗长的解释,主要是要问 - 我如何用一个简单的秘密正确地签署 JWT?
当我们迁移到新版本的 CoreClr 时,我们不得不暂时放弃对 HMAC 的支持。我们选择在 RC1 中添加对 ECDSA 的支持,并计划在 RC2 中重新添加 HMAC。
抱歉打扰了。您可以添加自己的 SignatureProvider 或等待几周。