【问题标题】:Validating Azure Mobile Service token in a WebApi service在 WebApi 服务中验证 Azure 移动服务令牌
【发布时间】:2013-08-15 19:59:33
【问题描述】:

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

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

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

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

我的方向正确吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢!但是,我无法在 WebApi 上验证从 Azure 收到的 JWT 令牌,所以目前我没有可行的解决方案......我向separated SO question 询问了更多详细信息。
    • 在 GitHub 上有一个名为 MyVote 的项目,它具有 JWT 令牌验证器的基本实现。此代码取自已删除的旧 ASP .NET 示例。我在移动服务 SDK 中添加了一个问题,为我们提供了一个用于 JS 和托管后端的专用令牌验证器。这是回购链接MyVote
    【解决方案2】:

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

    JWT Validator

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

    AuthenticationTokenSample

    主要验证发生在调用 ValidateSignature() 方法时,该方法获取 JWT 声明段的 UTF-8 表示形式的字节,并使用来自 Azure Mobile Services 的共享密钥在它们上计算 HMAC SHA-256 MAC。如果 JWT Crypto Segment 和之前计算的值,则可以确认该密钥用于在 JWT 上生成 HMAC,并且 JWT Claim Segment 的内容没有被篡改。

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

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2013-02-06
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多