微软账户的JWT身份验证令牌是如何签名的?

4
在我的Web应用程序中,我需要验证来自Live SDK 5.6的JWT身份验证令牌。一段时间以前,这些令牌的签名是使用签名密钥(从account.live.com/developers/applications获取)+“JWTSig”对头部+负载的base64编码进行HMACSHA256哈希。现在似乎不再是这种情况了。
有人知道现在这些令牌是如何签名的吗?
抱歉我的英语不好。
1个回答

0

最好的方法是获取从Azure移动服务返回的JWT令牌,并验证它是否使用与AMS相同的主密钥进行签名。GitHub上有一个项目展示了如何做到这一点:

JWT验证器

这基本上是另一个GitHub项目的派生,原始的ASP.NET示例在这里:

身份验证令牌示例

主要的验证发生在调用ValidateSignature()方法时,该方法使用来自Azure移动服务的共享密钥,在JWT声明段的UTF-8表示的字节上计算HMAC SHA-256 MAC。如果JWT Crypto Segment和先前计算的值相同,则可以确认该密钥用于在JWT上生成HMAC,并且JWT Claim Segment的内容未被篡改。

我发现的一个主要问题是在ValidateSignature()方法中,需要删除附加的"JWTSig"字符串,以避免它被附加到主密钥上。似乎从AMS开始,签名的令牌不再将该字符串附加到主密钥上。在我删除了这个部分之前,我一直无法通过验证。

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