我正在尝试在使用WebApi服务的跨平台移动应用程序上实现身份验证和身份验证 .
我的计划是将身份验证导出到联合 Cloud 服务,例如新的Azure移动服务 . 客户端移动应用程序将使用移动服务身份验证流程,获取令牌,而不是将其发送到WebApi的请求标头内,然后WebApi将对其进行验证并从中提取UserId .
假设我已经使用 DelegatingHandler
拦截器配置了WebApi验证JWT令牌,是否可以验证Azure移动服务发布的令牌?
SymmetricKey,Issuer和Audience的正确值是什么?
我正朝着正确的方向前进吗?
2 回答
http://www.thejoyofcode.com/Generating_your_own_ZUMO_auth_token_Day_8_.aspx上的帖子显示了如何生成Azure移动服务令牌,但其中包含验证它所需的信息 . 基本上,您需要用来验证它的密钥是来自服务的主密钥(不要将该密钥分发给任何客户端,但如果它's coded securely in your service, that should be fine). The audience depends on the provider which created the token (e.g., for FB, it'是字符串
"Facebook"
) . 发行人设为urn:microsoft:windows-azure:zumo
.您需要在
WebAPI
项目中执行的操作是实现一个自定义消息处理程序来拦截令牌并验证它是否使用AMS
中的相同主密钥进行了签名 . GitHub上有一个项目,展示了如何执行此操作:JWT Validator
这基本上是另一个GitHub项目的衍生物,它在这里有原始的ASP.NET示例:
AuthenticationTokenSample
主要验证发生在调用
ValidateSignature()
方法时,该方法获取JWT Claim段的UTF-8表示的字节,并使用Azure Mobile Services
中的共享密钥计算它们上的HMAC SHA-256 MAC . 如果JWT加密段和先前计算的值,则确认该密钥用于在JWT上生成HMAC并且JWT索赔段的内容未被篡改 .我发现的一个主要问题是 remove 附加的
"JWTSig"
字符串被附加到ValidateSignature()
方法中的主密钥 . 看来签名的令牌不再将该字符串附加到主密钥AMS
. 在删除该段之前,我遇到了各种麻烦 .