【问题标题】:Secure WebAPI with a JWT使用 JWT 保护 WebAPI
【发布时间】:2013-02-15 00:29:29
【问题描述】:

我正在尝试编写一个移动应用程序,该应用程序将从基于 webapi 的站点获取数据。

应通过 ACS 保护站点(因为可以有多个身份提供者)。

我的移动应用目前正在查询以下 url https://xx.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=javascriptnotify&realm=http://xx.azurewebsites.net/&version=1.0 以获取 IP 列表。

然后我允许用户选择一个 IP,然后使用 Web 浏览器控件向他们显示登录信息。

用户登录后,我会捕获响应并提取令牌,但现在我不确定我应该做什么。令牌如下所示:-

{"appliesTo":"http://****.azurewebsites.net/",
"context":null,
"created":1362069383,
"expires":1362072983,
"securityToken":"... a lot of text:-)",
"tokenType":"urn:ietf:params:oauth:token-type:jwt"}

所以,我猜我应该获取 securityToken 部分并将其添加到 get 请求的 Authorization 标头中?

问题 1 是我应该如何附加令牌 - 我只是附加安全令牌位,还是必须对批次进行 base 64 编码并再次将其附加为授权标头?

问题 2 如何配置 webapi 来处理 JWT?在我修改 ACS 以发出 JWT 令牌并安装 JWTSecurityTokenHandler 后,我仍然收到以下错误(这是被动身份验证):

 JWT10310: Unable to validate signature. validationParameters.SigningTokenResolver type: 'System.IdentityModel.Tokens.IssuerTokenResolver', was unable to resolve key to a token.
 The SecurityKeyIdentifier is: 
 'SecurityKeyIdentifier
    (
    IsReadOnly = False,
    Count = 1,
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash =  0x2FEE3EE96B019D4BA0C046124B77C652EEF768E5)
    )
 '. validationParameters.SigningToken was null.

谢谢

罗斯

【问题讨论】:

    标签: azure wif azure-acs


    【解决方案1】:

    尽管您没有使用 Azure 身份验证库,this AAL code sample is helpful 展示了如何使用新的JWT Token Handler 在请求管道中使用 HTTP 消息处理程序对 Web API 的请求进行身份验证。该代码显式处理由 ACS 发布的 JWT。特别是查看Global.asax.cs 中的TokenValidationHandler 类。流程是这样的:

    1. 消息处理程序检查来自客户端应用的传入请求。
    2. 使用 JWTTokenHandler 检查和验证授权标头。
    3. 如果 JWT 令牌有效,JWTTokenHandler 会实例化一个新的 ClaimsPrincipal 对象。如果令牌无效,则返回 HTTP 401 Unauthorized 响应。

    回到您的第一个问题,您只需要"securityToken" 值(类似于eyJ0eXAiOiJK...)来制作类似Authorization: Bearer eyJ0eXAiOiJK... 的授权标头。当它在请求中传递给您的 Web API 时,JWTTokenHandler 将通过消息处理程序对其进行验证。当然,这假设您的 Web API 已正确配置,以了解您用于从 ACS 获取令牌的 ACS 租户和安全域。

    编辑:查看有关保护 REST 服务并从移动应用程序访问它们的模式和实践指南 - 非常相似的场景可能有助于为您提供更多背景信息。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2013-08-04
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多