【问题标题】:Azure access_token contains info that I thought would be in the id_token, and vice-versaAzure access_token 包含我认为会在 id_token 中的信息,反之亦然
【发布时间】:2022-01-27 17:30:02
【问题描述】:

当使用 implicit grant flow 从 Azure 请求令牌和 id_token 时,使用类似的请求

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=token%20id_token
&redirect_uri=http%3A%2F%2Flocalhost
&scope=openid%20user.read
&response_mode=fragment
&state=12345
&nonce=678910

我已成功收到带有“access_token”和“id_token”的回复。

根据我的阅读,在解码“id_token”时,我应该看到有关用户的信息(如姓名、电子邮件、图片等),而应该使用“access_token”(不应解码)用作“授权”标头中的“承载”令牌。

当我使用https://jwt.ms 查看令牌详细信息时,“access_token”是带有用户详细信息的那个,而“id_token”没有。

当我尝试使用“access_token”访问我的 API 时,它不允许,但如果我使用“id_token”访问它,它会允许。

这似乎与文档相矛盾,所以我想知道是否有人可以为我澄清一下?

【问题讨论】:

    标签: azure oauth-2.0 jwt access-token


    【解决方案1】:

    您是对的 - ID 令牌是为您的应用提供有关经过身份验证的用户的信息的令牌,访问令牌是您应该用来访问 MS API 的令牌。也就是说,请注意以下几点。

    当我使用https://jwt.ms 查看令牌详细信息时,“access_token”是带有用户详细信息的那个,而“id_token”没有。

    “用户详细信息”是什么意思?通常访问令牌将包含有关用户的一些详细信息,API 需要这些详细信息来执行适当的授权。很多时候它会是sub 声明,但也可能有其他一些声明。另请注意,默认情况下,ID 令牌也不包含有关用户的太多信息。您必须请求其他 openID 范围,例如 profileemail 才能在 ID 令牌中获取有关用户的更多信息。以下是您可以在 ID 令牌中找到哪些声明以及应请求哪些范围来获取这些声明的文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens

    当我尝试使用“access_token”访问我的 API 时,它不允许,但如果我使用“id_token”访问它,它会允许。

    “我的 API”是什么意思?它是您从头开始创建的 API,还是您使用 Microsoft 工具部署的某个 API?您确定您的 API 已配置为可使用 Microsoft 的访问令牌进行访问吗?通常,该令牌将用于访问 MS API,而不是您自己的。

    【讨论】:

    • “我的 API”指的是我从头开始编写的 Azure 函数应用。我是这方面的新手,所以你必须指出我在哪里指定可以通过 Microsoft 的访问令牌访问它的方向。我目前使用 Microsoft/Azure 身份提供程序将我的函数应用程序的“权限”连接到我的“应用程序注册”。这个应用程序的“身份验证”配置了一个“Web”平台,返回访问和 id 令牌。此应用程序连接到启用了“需要用户分配”的“企业应用程序”,并指定了某些用户/组谁可以访问。
    • 不幸的是,我对 Azure 函数知之甚少。也许有一些教程可以展示如何创建通用设置?
    【解决方案2】:

    根据授权服务器的配置方式,返回的 id-token 可能不包含那么多用户声明。

    但是客户将如何获得缺失的信息?

    然后,客户端可以向 UserInfo 端点发出后台请求,以检索其他声明和用户信息。这样做可以减少 id-token 的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 2020-06-16
      • 2019-12-27
      相关资源
      最近更新 更多