ASP.NET Core JWT - HmacSha512和HmacSha512Signature算法有什么区别?

4

SecurityAlgorithms类中有两个相似的选项。 用于签署JWT令牌的是哪一个? 有什么区别吗?


你在哪里提供算法? - Collin Dauphinee
SecurityTokenDescriptorSigningCredentials - Mr Patience
2个回答

3
差异在令牌标头中,特别是在 alg 属性中。当您使用 HmacSha512 时,标头如下:
{
  "alg": "HS512",
  "typ": "JWT"
}

但是当你使用HmacSha512Signature时,头部信息看起来像这样:

{
  "alg": "http://www.w3.org/2001/04/xmldsig-more#hmac-sha512",
  "typ": "JWT"
}

您可以使用 https://jwt.io/ 来确认。

当我有同样的问题时,我发现许多库(主要在 .NET 之外)不支持将 http://www.w3.org/2001/04/xmldsig-more#hmac-sha512 作为 alg 属性值,因为它没有包含在 JSON Web Algorithms RFC,第 3.1 节 中。

相关讨论 1: https://github.com/auth0/node-jsonwebtoken/issues/662

相关讨论 2: https://giters.com/jwtk/jjwt/issues/676

所以我个人决定使用 HmacSha512。如果整个系统将在 .NET 生态系统内开发,则两者均可使用且效果相同,但如果 token 可能被非 .NET 应用程序使用,则最好使用 HmacSha512


这是.NET实现的一个问题,但它不影响.NET Core。请参阅相关的单元测试:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/test/System.IdentityModel.Tokens.Jwt.Tests/JwtSecurityTokenHandlerTests.cs#L614 - Collin Dauphinee

1
JWT没有功能上的区别;在底层,HmacSha512Signature被转换为HmacSha512
我的有限理解是它们是表示相同基础算法的不同常量。带有Signature后缀的版本是用于在XML中表示算法的标识符,而没有后缀的版本映射到JWT使用的算法标识符。 旧文档中提到了使用以'Signature'结尾的算法作为签名参数的备注,但最新文档不再包含该备注。我怀疑Signature版本是出于遗留和向后兼容性原因而保留的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接