【问题标题】:Scope is not being added to Access Token returned from Azure Ad范围未添加到从 Azure Ad 返回的访问令牌
【发布时间】:2023-01-26 03:09:23
【问题描述】:

概述

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

  1. 通过来自客户端应用程序的用户交互触发此 API(这部分有效)。
  2. 从预定作业以编程方式触发此 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


    【解决方案1】:

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

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

    已暴露API的主要APP:

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

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

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

    【讨论】:

      【解决方案2】:

      我已经完成了场景 2 中 Ansuman Bal 建议的操作,使用隐式授权流,但我不明白他们是如何从该响应中获取令牌的。有人知道吗?

      【讨论】:

      猜你喜欢
      • 2023-02-10
      • 2018-08-17
      • 2021-10-26
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2017-05-13
      • 2019-05-15
      相关资源
      最近更新 更多