【发布时间】:2023-01-26 03:09:23
【问题描述】:
概述
我们有一个 Azure AD 安全 API 作为 Web 应用程序存在于 Azure 中。我们需要能够:
- 通过来自客户端应用程序的用户交互触发此 API(这部分有效)。
- 从预定作业以编程方式触发此 API,该作业将简单地获取令牌并点击此 API(由于身份验证问题,此部分不起作用)。
问题
问题是,当我们从 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" }如您所见,
scp(范围)未包含在令牌声明中,即使我们将其包含在请求中也是如此。如果我们使用此令牌向我们的 API 发出请求,我们会收到以下错误:
System.UnauthorizedAccessException: IDW10201: Neither scope or roles claim was found in the bearer token.非常感谢任何有关我们如何从 Azure AD 获取具有适当范围/权限以调用我们的 API 的访问令牌的帮助。
笔记
我们预定作业的 Azure AD 应用程序注册将请求令牌然后点击我们的 API,它确实具有委托 API 权限
access_as_user,您可以看到我将其包含在令牌请求的范围内。
【问题讨论】:
标签: azure azure-active-directory