正在验证WebApi服务中的Azure移动服务令牌

本文关键字:服务 Azure 移动 令牌 验证 WebApi | 更新日期: 2023-09-27 18:27:56

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

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

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

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

我的方向对吗?

正在验证WebApi服务中的Azure移动服务令牌

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

WebAPI项目中,您需要实现一个自定义消息处理程序来拦截令牌,并验证它是否使用AMS中的相同主密钥进行了签名。GitHub上有一个项目展示了如何做到这一点:

JWT验证器

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

AuthenticationTokenSample

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

我发现的一件主要事情是ValidateSignature()方法中将附加的"JWTSig"字符串从主密钥中移除。看来被签名的令牌不再将该字符串附加到DelegatingHandler0中的主密钥。在删除该片段之前,我在通过验证方面遇到了各种困难。