Dav*_*arr 5 azure azure-web-sites
我有一个Azure应用服务,已在其上启用身份验证/授权并将AD配置为身份验证提供程序。
/.auth服务上存在所有路由,我可以登录。成功登录后,我可以致电/.auth/me获取access_token。响应如下所示:
[
{
"access_token": "AQABAAAAAA...Gni4EiQgAA",
"expires_on": "2017-02-28T19:17:08.0000000Z",
"id_token": JWT TOKEN
...
}
]
Run Code Online (Sandbox Code Playgroud)
然后,我access_token在授权承载标头中使用来从服务请求数据。
"Authorization": "Bearer " + "AQABAAAAAA...Gni4EiQgAA"
Run Code Online (Sandbox Code Playgroud)
我的服务返回以下错误
IDX10708: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' cannot read this string: 'AQABAAAAAA...Gni4EiQgAA'.
The string needs to be in compact JSON format, which is of the form: '<Base64UrlEncodedHeader>.<Base64UrlEndcodedPayload>.<OPTIONAL, Base64UrlEncodedSignature>'.
Run Code Online (Sandbox Code Playgroud)
根据该讨论,access_token其旨在用作承载令牌。我在这里还阅读了access_token应该是base64编码的方法,但事实并非如此。
此外,如果我将id_token用作承载令牌,那么身份验证将按预期工作(采用id_tokenJWT格式)。
编辑
当我手动实现所描述的流程的Oauth 这里,我收到一个适当的JWT access_token。
GET
https://login.microsoftonline.com/common/oauth2/authorize?client_id=client_id&response_type=code&redirect_uri=redirect_uri
Run Code Online (Sandbox Code Playgroud)
其次是
POST
https://login.microsoftonline.com/common/oauth2/token
grant_type=authorization_code
client_id=client_id
code=CODE FROM ABOVE
redirect_uri=redirect_uri
resource=resource
client_secret=client_secret
RESPONSE
{
"access_token": JWT TOKEN,
"token_type": "Bearer",
...
}
Run Code Online (Sandbox Code Playgroud)
如何获得Azure轻松身份验证JWT access_token
根据您的描述,我启用了身份验证/授权并将AD配置为身份验证提供程序来测试此问题。众所周知,当您在Azure Portal上启用身份验证/授权时,默认response_type值为id_token。您需要登录https://manage.windowsazure.com并更新App Service Auth Configuration,如下所示:
注意:如果未指定resourcefor additionalLoginParams,则将检索非JSON Web令牌(JWT)格式的access_token。
然后,我在授权承载标头中使用access_token从服务请求数据。
要访问您的服务,您可以利用AppServiceAuthSessionCookie或使用Authorization:Bearer "{your-id-token}"。
有关更多详细信息,您可以参考此类似教程。
| 归档时间: |
|
| 查看次数: |
3693 次 |
| 最近记录: |