在我的Web应用程序中,我需要验证来自Live SDK 5.6的JWT身份验证令牌。一段时间以前,这些令牌的签名是使用签名密钥(从account.live.com/developers/applications获取)+“JWTSig”对头部+负载的base64编码进行HMACSHA256哈希。现在似乎不再是这种情况了。
有人知道现在这些令牌是如何签名的吗?
抱歉我的英语不好。
有人知道现在这些令牌是如何签名的吗?
抱歉我的英语不好。
最好的方法是获取从Azure移动服务返回的JWT
令牌,并验证它是否使用与AMS
相同的主密钥进行签名。GitHub上有一个项目展示了如何做到这一点:
这基本上是另一个GitHub项目的派生,原始的ASP.NET示例在这里:
主要的验证发生在调用ValidateSignature()
方法时,该方法使用来自Azure移动服务
的共享密钥,在JWT声明段的UTF-8表示的字节上计算HMAC SHA-256 MAC。如果JWT Crypto Segment和先前计算的值相同,则可以确认该密钥用于在JWT上生成HMAC,并且JWT Claim Segment的内容未被篡改。
ValidateSignature()
方法中,需要删除附加的"JWTSig"
字符串,以避免它被附加到主密钥上。似乎从AMS
开始,签名的令牌不再将该字符串附加到主密钥上。在我删除了这个部分之前,我一直无法通过验证。