【问题标题】:Cant request OAuth2 token for specific scope with Azure AD and Client Credentials flow无法使用 Azure AD 和客户端凭据流为特定范围请求 OAuth2 令牌
【发布时间】:2021-06-20 21:48:51
【问题描述】:

我们正在开发一个带有前端和后端的应用程序。应该通过带有 OAuth2 令牌的 Rest API 访问后端。授权提供者是 Azure AD。

在 Azure 中,我们创建了 2 个应用注册。一个用于 API,一个用于客户端应用程序。 API 注册定义了 3 个范围(读取、写入、删除)。客户端应用注册已为这些范围委派了权限。

我们正在从客户端应用注册请求带有 clientID 和 clientSecret 的令牌。

问题是我们只能请求范围为 api/.default 的令牌。例如。 api/read 导致无效范围错误。 但如果我们使用 api/.default,则令牌中不包含范围 (scp) 属性。这不是需要检查使用 API 的应用是否具有正确的权限吗?

我不确定我们是否做错了什么,或者我们是否有错误的理解/期望。

【问题讨论】:

    标签: azure oauth token clientcredential


    【解决方案1】:

    使用客户端凭据流获取 Azure AD JWT 令牌时,范围必须采用以下格式

    api://<clientid of the API app registered>/.default
    

    根据 MSDN,OAUTH Client Credential Flow

    scope - 必需 - 此请求中为 scope 参数传递的值应该是资源标识符(应用程序 ID URI) 您想要的资源,附加 .default 后缀。对于微软 图表示例,值为https://graph.microsoft.com/.default。这 value 告诉 Microsoft 身份平台,所有直接 您为应用程序配置的应用程序权限,端点 应该为与您的资源相关联的人颁发令牌 想用。要了解有关 /.default 范围的更多信息,请参阅同意 文档。

    【讨论】:

    • 好的,但是我是否应该能够看到令牌中允许的范围,以便在消费应用程序经过身份验证以读取、写入或删除内容时我可以签入应用程序代码?跨度>
    • 您提到的过程称为“授权”,范围将与令牌一起使用。您应该使用 Microsoft 提供的类库在代码中定义您的授权过程。查看此链接 - docs.microsoft.com/en-us/azure/active-directory/develop/… 此外,如果您想查看范围以供理解,您可以使用 jwt.ms 对其进行解码。希望对您有所帮助。
    • 正如我所说,当使用 /.default 请求时,范围不会在令牌中编码。 'scp' 属性完全缺失。所以如果令牌中没有编码范围,我不知道如何检查代码中的范围。
    • @PeterPetrus 我们知道如何获取指定范围的令牌 scp 吗?
    • 范围是应用范围?所以它是应用程序拥有的任何权限。由于只有一个应用程序,每个令牌是否需要单独的范围?
    猜你喜欢
    • 2020-04-28
    • 2023-03-25
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2021-12-22
    • 2019-12-03
    • 2017-08-22
    • 2019-06-16
    相关资源
    最近更新 更多