繁体   English   中英

Scope 未添加到从 Azure 广告返回的访问令牌

[英]Scope is not being added to Access Token returned from Azure Ad

概述

我们有一个 Azure AD 安全 API 生活在 Azure 作为 web 应用程序。 我们需要能够:

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

问题

问题是,当我们从 Azure AD 请求令牌时,scope 未在我们的令牌声明中设置,导致 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 ,您可以看到我将其包含在令牌请求的 scope 中。

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

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

API被曝光的主要APP:

在此处输入图像描述 在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM