1

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

我的计划是将身份验证导出到联合云服务,例如新的 Azure 移动服务。Client Mobile 应用程序将使用 Mobile Service 身份验证流,获取令牌,然后将其在请求的标头中发送到 WebApi,WebApi 依次对其进行验证并从中提取 UserId。

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

SymmetricKey、Issuer 和 Audience 的正确值是多少?

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

4

2 回答 2

2

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

于 2013-08-15T22:55:02.700 回答
1

您在WebAPI项目中需要做的是实现一个自定义消息处理程序来拦截令牌并验证它是使用来自AMS. GitHub上有一个项目展示了如何做到这一点:

JWT 验证器

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

AuthenticationTokenSample

主要验证发生在调用ValidateSignature()获取 JWT Claim 段的 UTF-8 表示的字节并使用来自Azure Mobile Services. 如果 JWT 加密段和之前计算的值,则可以确认密钥用于在 JWT 上生成 HMAC,并且 JWT 声明段的内容没有被篡改。

我发现的一件主要事情是从附加到方法中的主密钥中删除附加的字符串。似乎被签名的令牌不再将该字符串附加到主密钥。在我删除该段之前,我在通过验证之前遇到了各种各样的麻烦。"JWTSig"ValidateSignature()AMS

于 2015-02-18T03:15:08.830 回答