Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 使用JWT保护WebAPI_Azure_Wif_Azure Acs - Fatal编程技术网

Azure 使用JWT保护WebAPI

Azure 使用JWT保护WebAPI,azure,wif,azure-acs,Azure,Wif,Azure Acs,我正在尝试编写一个移动应用程序,它将从基于webapi rest的站点获取数据 该网站应通过ACS进行保护(因为可能有多个身份提供商) 我的移动应用程序当前正在查询以下url以获取IP列表 然后我允许用户选择IP,然后使用web浏览器控件向他们显示登录 用户登录后,我捕获响应并提取令牌,但现在我不确定应该做什么。令牌如下所示:- {"appliesTo":"http://****.azurewebsites.net/", "context":null, "created":1362069383,

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

该网站应通过ACS进行保护(因为可能有多个身份提供商)

我的移动应用程序当前正在查询以下url以获取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请求的授权头中

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

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

谢谢


Ross

虽然您没有使用Azure身份验证库,但在演示如何使用新的身份验证库来使用请求管道中的HTTP消息处理程序对Web API的请求进行身份验证时。代码显式地处理ACS发布的JWT。特别是,请查看
Global.asax.cs
中的
TokenValidationHandler
类。流程如下所示:

  • 来自客户端应用程序的传入请求由消息处理程序检查
  • 使用JWTTokenHandler检查和验证授权标头
  • 如果JWT令牌有效,JWTTokenHandler将实例化一个新的ClaimsPrincipal对象。如果令牌无效,则返回HTTP 401未经授权的响应 回到您的第一个问题,您只需要
    “securityToken”
    值(类似于
    eyj0exaijk…
    )来创建一个类似于
    authorization:Bearer eyj0exaijk…
    的授权头。当这在请求中传递给Web API时,JWTTokenHandler将通过消息处理程序对其进行验证。当然,这假设您的Web API已正确配置,以便首先了解用于从ACS获取令牌的ACS租户和安全域

    编辑:看一看关于保护REST服务并从移动应用程序访问它们的模式和实践指南-非常类似的场景,可能会帮助您提供更多上下文

     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.