在Web Api服务中验证Azure移动服务令牌

时间:2013-08-15 19:59:34

标签: c# mobile asp.net-web-api xamarin azure-mobile-services

我正在尝试在使用WebApi服务的跨平台移动应用程序上实现身份验证和识别。

我的计划是将身份验证导出到联合云服务,例如新的Azure移动服务。客户端移动应用程序将使用移动服务身份验证流程,获取令牌,而不是将请求的头部内部发送到WebApi,然后WebApi将对其进行验证并从中提取UserId。

假设我已经使用DelegatingHandler拦截器配置了WebApi验证JWT令牌, 是否可以验证Azure移动服务发布的令牌?

SymmetricKey,Issuer和Audience的正确值是什么?

我是朝着正确的方向前进的吗?

2 个答案:

答案 0 :(得分:2)

http://www.thejoyofcode.com/Generating_your_own_ZUMO_auth_token_Day_8_.aspx上的帖子显示了如何生成 Azure移动服务令牌,但是它还具有验证它所需的信息。基本上,您需要用来验证它的密钥是来自服务的主密钥(不要将该密钥分发给任何客户端,但如果它在您的服务中安全编码,则应该没问题)。观众取决于创建令牌的提供者(例如,对于FB,它是字符串"Facebook")。发行人设置为urn:microsoft:windows-azure:zumo

答案 1 :(得分:1)

您在WebAPI项目中需要做的是实现一个自定义消息处理程序来拦截令牌,并使用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()的主密钥。在删除该段之前,我遇到了各种麻烦。