Bry*_*eBy 2 azure azure-active-directory
概述
我们有一个 Azure AD 安全 API 作为 Web 应用程序存在于 Azure 中。我们需要能够:
问题
问题是,当我们从 Azure AD 请求令牌时,令牌声明中未设置范围,导致 API 拒绝令牌。
此请求返回带有以下声明的访问令牌:
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,scp即使我们将(范围)包含在请求中,令牌声明中也不包含它。
如果我们使用此令牌向 API 发出请求,我们会收到以下错误:
System.UnauthorizedAccessException: IDW10201: Neither scope or roles claim was found in the bearer token.
Run Code Online (Sandbox Code Playgroud)
如果我们能提供有关如何从 Azure AD 获取访问令牌以及调用我们的 API 的适当范围/权限的任何帮助,我们将不胜感激。
笔记
我们计划作业的 Azure AD 应用程序注册将请求令牌,然后访问我们的 API,确实具有委派 API 权限access_as_user,您可以看到我将其包含在令牌请求的范围中。
上述内容是预期的,因为使用客户端凭据您无法获得委派权限,access_as_user即客户端凭据中的权限和范围应用作api://<APP_ID>/.default. 因此,如果您想要委派权限,那么您将必须使用隐式授予流程而不是客户端凭据。
为了测试,我创建了两个应用程序注册,一个用于公开 API(Postman),另一个用于身份验证(Powershelltest),然后,我在 2 个不同的场景中测试了相同的内容,例如一个用于客户端凭据,另一个用于隐式授予:
主要APP已暴露API:
用于身份验证的应用程序:
场景 1 使用客户端凭证流程:
使用隐式授予流程的场景 2:
| 归档时间: |
|
| 查看次数: |
6711 次 |
| 最近记录: |