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