gpt4 book ai didi

azure - 范围未添加到从 Azure Ad 返回的访问 token

转载 作者:行者123 更新时间:2023-12-02 06:14:14 26 4
gpt4 key购买 nike

概述

我们有一个 Azure AD 安全 API 作为 Web 应用程序存在于 Azure 中。我们需要能够:

  1. 通过客户端应用程序的用户交互触发此 API(此部分有效)。
  2. 从计划作业中以编程方式触发此 API,该作业将简单地获取 token 并调用此 API(由于身份验证问题,此部分不起作用)。

问题

问题是,当我们从 Azure AD 请求 token 时, token 声明中未设置范围,导致 API 拒绝 token 。

这是我们提出的要求: enter image description here

此请求返回带有以下声明的访问 token :

{
"aud": "<our api client id>",
"iss": "https://login.microsoftonline.com/<tenantId>/v2.0",
"iat": 1644421512,
"nbf": 1644421512,
"exp": 1644425412,
"aio": "<value>",
"azp": "<scheduled job client id>",
"azpacr": "1",
"oid": "<guid>",
"rh": "<value>",
"sub": "<guid>",
"tid": "<guid>",
"uti": "<value>",
"ver": "2.0"
}

如您所见,scp(范围)未包含在 token 声明中,即使我们将其包含在请求中也是如此。

如果我们使用此 token 向 API 发出请求,我们会收到以下错误:

System.UnauthorizedAccessException: IDW10201: Neither scope or roles claim was found in the bearer token.

如果我们能提供有关如何从 Azure AD 获取访问 token 以及调用我们的 API 的适当范围/权限的任何帮助,我们将不胜感激。

注意

我们计划作业的 Azure AD 应用程序注册将请求 token ,然后访问我们的 API,确实具有委派 API 权限 access_as_user,您可以看到我将其包含在 token 请求的范围中。

最佳答案

上述内容是预期的,因为使用客户端凭据您无法获得委派权限,即 access_as_user权限以及客户端凭据中的范围应用作 api://<APP_ID>/.default 。因此,如果您想要委派权限,那么您将必须使用隐式授权流程而不是客户端凭据。

为了测试,我创建了两个应用程序注册,一个用于公开 API(Postman),另一个用于身份验证(Powershelltest),然后,我在 2 个不同的场景中进行了相同的测试,例如用于客户端凭据,另一个用于隐式授予:

已暴露API的主要APP:

enter image description here enter image description here

用于身份验证的应用程序:

enter image description here

enter image description here

场景 1 使用客户端凭据流程:

enter image description here

enter image description here

使用隐式授权流程的场景 2:

enter image description here

enter image description here

关于azure - 范围未添加到从 Azure Ad 返回的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71053269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com