【问题标题】:How to get Azure easy auth JWT access_token如何获取 Azure 简单身份验证 JWT access_token
【发布时间】:2017-07-19 22:58:31
【问题描述】:

我有一个 Azure 应用服务,我在该服务上启用了身份验证/授权并将 AD 配置为身份验证提供程序。

服务上所有/.auth路由都存在,我可以登录。登录成功后我可以调用/.auth/me获取access_token。响应如下:

[
  {
     "access_token": "AQABAAAAAA...Gni4EiQgAA",
     "expires_on": "2017-02-28T19:17:08.0000000Z",
     "id_token": JWT TOKEN
     ...
  }
]

然后我在授权承载标头中使用access_token 从服务请求数据。

"Authorization": "Bearer " + "AQABAAAAAA...Gni4EiQgAA"

我的服务返回以下错误

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>'.

根据this discussionaccess_token 旨在用作承载令牌。我还阅读了here access_token 应该是 base64 编码的,但事实并非如此。

此外,如果我使用 id_token 作为 Bearer 令牌,则身份验证按预期工作(id_token 是 JWT 格式)。

编辑

当我按照here 的描述手动实现 Oauth 流程时,我会收到正确的 JWT access_token

GET
https://login.microsoftonline.com/common/oauth2/authorize?client_id=client_id&response_type=code&redirect_uri=redirect_uri

紧随其后

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",
  ...
}

【问题讨论】:

  • 您在后端服务器上的设置是什么?

标签: azure azure-web-app-service


【解决方案1】:

如何获得 Azure 简易认证 JWT access_token

根据您的描述,我启用了身份验证/授权并将 AD 配置为身份验证提供程序来测试此问题。据我所知,当您在 Azure 门户上启用身份验证/授权时,默认的 response_typeid_token。您需要登录https://manage.windowsazure.com并更新App Service Auth Configuration如下:

注意:如果您没有为 additionalLoginParams 指定 resource,您将检索到不是 JSON Web 令牌 (JWT) 格式的 access_token。

然后,我使用授权承载标头中的 access_token 从服务请求数据。

要访问您的服务,您可以使用 AppServiceAuthSession cookie 或使用 Authorization:Bearer "{your-id-token}"

更多详情可以参考这个类似的tutorial

【讨论】:

  • 谢谢!这为我指明了正确的方向。但是我想知道为什么当整个权限分配流程都有一个 UI 时,这个设置会被隐藏起来。
  • @Nitin 我知道我会在 3 年后回复这个问题。但我的目标是一样的。这样做会导致登录后出现 500 内部错误响应。 NodeJS 应用程序可以完美运行,无需任何额外的登录参数。但是添加 resource=https://graph.microsoft.com 会导致 500
  • 这里的资源应该是您尝试授予访问权限的事物的标识符。就我而言,它是我们单独构建的功能应用程序。所以我从 Azure AD 提供了它的应用程序 ID GUID 标识符。或者,这可能是其在 Azure AD 中配置的 URL。
  • 但就像布鲁斯所说的,我应该能够访问图表。还是我必须使用其他ID?但是当我这样做时,myapp.com/.auth/me 端点工作并给了我一个与图形一起工作的 JWT。但是myapp.com 的应用程序返回 500
  • 我想你现在需要去这里做这个:Resource Explorer per Refresh identity provider tokens
猜你喜欢
  • 2017-11-12
  • 2016-07-14
  • 1970-01-01
  • 2021-06-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
相关资源
最近更新 更多