Microsoft帐户JWT身份验证令牌是如何签名的?

时间:2014-08-21 23:41:23

标签: security jwt live-sdk microsoft-account

在我的Web应用程序中,我需要验证从Live SDK 5.6获得的JWT身份验证令牌。 不久之前,这些令牌的签名是使用签名密钥的base64编码头+有效负载的HMACSHA256哈希值,这是应用密钥(来自account.live.com/developers/applications)+" JWTSig"。 现在似乎并非如此。

有谁知道这些令牌现在如何签署?

抱歉我的英文。

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是从Azure移动服务返回JWT令牌,并使用AMS中的相同主密钥对其进行签名验证。 GitHub上有一个项目,展示了如何做到这一点:

JWT Validator

这基本上是另一个GitHub项目的衍生物,它在这里有原始的ASP.NET样本:

AuthenticationTokenSample

主要验证在调用ValidateSignature()方法时发生,该方法获取JWT Claim段的UTF-8表示的字节,并使用{{1}中的共享密钥计算它们上的HMAC SHA-256 MAC }。如果JWT加密段和先前计算的值,则确认该密钥用于在JWT上生成HMAC并且JWT索赔段的内容未被篡改。

我发现的一个主要问题是删除将附加的Azure Mobile Services字符串附加到"JWTSig"方法中的主密钥。看来签名的令牌不再将该字符串附加到ValidateSignature()的主密钥。在删除该段之前,我遇到了各种麻烦。