【问题标题】:How to update JWT version to 2.0?如何将 JWT 版本更新到 2.0?
【发布时间】:2021-01-21 08:25:30
【问题描述】:

在通过 login.microsoftonline.com 对自己进行身份验证后,我有一个来自 Azure 的 JWT,它的 iss 值为 https://sts.windows.net/...(经过一些研究,这似乎是由于 JWT 的 "ver": 1.0 )。为了获得https://login.microsoftonline.com/... 发布的 JWT,我更新了应用程序的 Manifest,以便将 accessTokenAcceptedVersion 设置为 2,而不是默认设置为 null

我等了 5 个多小时,但我仍然得到了错误版本的令牌,我不断得到带有 "ver": 1.0"iss": "https://sts.windows.net/..." 的 JWT。有没有我遗漏的步骤?

AuthConfig 的scope 的值为openid,我目前正在使用隐式流(将很快更改为身份验证代码流,但仅在修复 JWT 版本问题之后..)

提前致谢!

【问题讨论】:

  • 你是调用ms graph api还是你的自定义api?
  • 我想是 ms graph api。在我的 AuthConfig 中,我同时拥有 "loginUrl": "https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize""issuer": "https://login.microsoftonline.com/<tenate-id>/v2.0"。我使用angular-oauth2-oidc btw,如果有帮助的话..
  • 正如您所见,AuthConfig 中的loginUrlissuer 中都包含v2.0
  • 等一下,我正在测试。

标签: azure jwt azure-authentication angular-oauth2-oidc


【解决方案1】:

访问令牌的版本与你用来请求令牌的端点无关,而与你请求的资源有关。 ms graph api的默认版本是1.0版本的token。如果您想获取2.0 版本的令牌,您应该请求您的自定义api。

首先,你需要创建一个代表该api的应用程序,然后将受Azure保护的api暴露出来。

接下来,在“API 权限”下,让您的前端应用程序访问您的后端 api:

  • 在“API 权限”下单击“添加权限”,然后单击“我的 API”选项卡。
  • 找到您的后端应用程序并选择适当的范围。
  • 点击“添加权限”。
  • 为您的 API 授予管理员许可。

接下来需要使用auth code flow获取access token,需要先登录用户获取授权码,然后使用授权码兑换access token。

解析访问令牌,它将显示 v2。

【讨论】:

  • 不幸的是,我没有直接访问权限来更改 Azure 中的任何内容,但您的回答让我想到了将我已经拥有的现有范围放入 AuthConfig scope。但是这个首先已经存在的范围听起来像https://<app-url>/user_impersonation(不以api://开头)并且将“管理员和用户”作为“谁可以同意”;推荐这种做法吗?添加这个范围确实给了我正确的issver,虽然:)
  • 我推荐你的方法。你添加的 api 实际上是一个受 Azure 保护的自定义 api。自定义api不是必须以api://开头的,可以自定义,就像你添加的一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2016-11-03
  • 2016-03-06
  • 2013-07-12
  • 2014-05-01
相关资源
最近更新 更多