Microsoft 帐户 JWT 身份验证令牌如何签名?
Posted
技术标签:
【中文标题】Microsoft 帐户 JWT 身份验证令牌如何签名?【英文标题】:How are Microsoft account JWT authentication tokens signed? 【发布时间】:2014-10-15 18:00:56 【问题描述】:在我的 Web 应用程序中,我需要验证从 Live SDK 5.6 获得的 JWT 身份验证令牌。 不久前,这些令牌的签名是使用签名密钥的 base64 编码标头 + 有效负载的 HMACSHA256 哈希,这是应用程序机密(来自 account.live.com/developers/applications)+“JWTSig”。 现在好像不是这样了。
有人知道现在这些令牌是如何签名的吗?
对不起我的英语。
【问题讨论】:
【参考方案1】:执行此操作的最佳方法是获取从 Azure 移动服务返回的 JWT
令牌,并验证它是使用来自 AMS
的相同主密钥签名的。 GitHub上有一个项目展示了如何做到这一点:
JWT Validator
这基本上是另一个 GitHub 项目的衍生品,这里有原始 ASP.NET 示例:
AuthenticationTokenSample
主要验证发生在调用 ValidateSignature()
方法时,该方法获取 JWT 声明段的 UTF-8 表示形式的字节,并使用来自 Azure Mobile Services
的共享密钥在它们上计算 HMAC SHA-256 MAC。如果 JWT Crypto Segment 和之前计算的值,则可以确认该密钥用于在 JWT 上生成 HMAC,并且 JWT Claim Segment 的内容没有被篡改。
我发现的一件主要事情是在ValidateSignature()
方法中删除附加到主密钥的"JWTSig"
字符串。似乎正在签名的令牌不再从AMS
将该字符串附加到主密钥。在删除该段之前,我在通过验证时遇到了各种各样的麻烦。
【讨论】:
以上是关于Microsoft 帐户 JWT 身份验证令牌如何签名?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Microsoft 身份的情况下对 blazor 服务器进行 jwt 身份验证?
Google 登录 - 访问令牌、身份验证令牌和 JWT ID 令牌之间的区别
使用 Microsoft System.IdentityModel.Tokens.Jwt 在 Asp.net WebApi 中实现 JWT 身份验证
Docusign REST API:使用 Microsoft Flow 的 JWT Grant 实现 OAuth 身份验证