【问题标题】:Understanding how scopes can be used for user authorization in Azure AD了解如何在 Azure AD 中使用范围进行用户授权
【发布时间】:2019-10-03 19:02:07
【问题描述】:

阅读有关 Azure AD 和 OAuth 授权范围的信息时,总会出现。但是我不明白它们如何用于以下场景:

我的设置:

我注册了两个应用程序,一个是 SPA,另一个是 WEB API。我使用 SPA 中的隐式授权流来请求 WEB API 的访问令牌。在 WEB API 应用程序中,我注册了四个范围 A、B、C 和 D。

场景是什么:

用户到达我的 SPA 并被重定向到 Azure AD。客户端使用隐式流请求访问令牌。在设置向 Azure AD 发出实际请求的客户端时,会提供范围(A、B、C 和 D)。

我不明白的:

当用户到达 SPA 时,范围已经在 SPA 客户端上进行了硬编码。我想要的是让不同的人类用户访问 WEB API 上的不同范围。

我的问题是:

  • 只有当您有多个客户端应用程序时,范围才相关 与您何时拥有多个实际人类用户无关?
  • 如果范围不适用于用户,还有哪些替代方案?
  • 如果范围也适用于用户,我该如何使用它们?

【问题讨论】:

    标签: azure oauth active-directory azure-active-directory openid


    【解决方案1】:

    据我了解,您的问题与 Azure AD V2 Microsoft Graph 用户范围相关。这是我的回答:

    1. 如果使用签名用户获取access token(密码流),范围(即access token的权限)都是与用户相关的,我们这里把权限称为委托权限。如果您使用客户端应用程序获取访问令牌(client_credentials 流),访问令牌的权限都与客户端应用程序相关,我们在这里将权限称为 应用程序权限 。 如果您想了解更多,请参考this official doc。 因此,您的场景中的范围是关于用户而不是您用于用户登录的客户端应用程序。
    2. 不太清楚您的问题,能否请您详细介绍一下您的要求或场景?
    3. 如果您只想调用 Microsoft Graph API 或 Office 相关 API,服务器端会为您检查访问令牌中的范围。如果访问令牌没有 API 所需的范围,您将收到 403 错误消息:“权限不足,无法完成操作。”没有必要 故意使用它。This doc 也提到过。

    根据您的描述,您想知道的是:是否可以动态获取具有范围(或权限)的访问令牌而不是硬代码范围。可以使用Azure AD V2 endpoint(每个 Azure AD 应用程序都有 v1 和 v2 端点,v1 仅用于 B2B 场景,它不支持获取具有动态权限的访问令牌)。并且this doc 很好地描述了您的要求。

    如果有什么不清楚或误解,请随时告诉我:)

    【讨论】:

    • 您好,请问您对这篇文章还有什么顾虑吗?有用吗?
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2016-08-02
    • 2017-06-11
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多