【问题标题】:Azure AD OAuth generates token for audience without permissionAzure AD OAuth 未经许可为受众生成令牌
【发布时间】:2021-04-26 20:14:08
【问题描述】:

尽管阅读了 Microsoft.com 上的多篇文章和教程,但我在理解如何使用 Azure AD 中的应用注册/OAuth2 定义 API 之间的权限时遇到了问题。例如,我在 Azure AD 中设置了 2 个简单的应用程序注册,一个用于后端 API(比如说客户端 ID A),另一个用于前端或另一个 API(客户端 ID B)。然后,我设置了一个带有默认(模板)身份验证(选项 = 租户、客户端 ID 等)和默认天气预报端点的基本 .NET Core API。

        services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
            .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
        services.AddControllers();

现在,我可以从https://login.microsoftonline.com/<tenant>/oauth2/token 获得一个令牌,客户端 ID = B 和资源 = 客户端 ID A,当我发送这个令牌时(使用 'aud = A')到它接受它的 API。

为什么我没有在App Registrations A和B之间建立任何关系,却成功生成了token? Azure AD 中的 API 权限选项卡在两个注册中都是空的 - 我认为 AAD 会拒绝说明应用 B 无权访问应用 A 的请求。还是我完全负责通过我的应用上的代码验证受众声明?

【问题讨论】:

  • 我写了一篇关于这个话题的文章:joonasw.net/view/…。这是后续行动:joonasw.net/view/…。 TL;DR,您需要定义和检查权限。
  • 谢谢你的这些。我一直认为 AD 在发布令牌之前会检查权限。我很惊讶没有一个教程(microsoft.com 的)提到权限未经 AAD 验证,这完全取决于您。
  • 我会为此写一个答案:)

标签: .net-core oauth-2.0 azure-active-directory


【解决方案1】:

在 Azure AD 中,可以通过客户端凭据流向客户端应用程序没有权限的应用程序获取访问令牌。 这可能是为了启用目标 API 处理整个授权的某些场景,但我不确定。

我前段时间写了一篇关于需要经常检查权限的文章:https://joonasw.net/view/always-check-token-permissions-in-aad-protected-api。 在微软解决跨租户获取访问令牌的能力后,我还写了一篇后续文章:https://joonasw.net/view/cross-tenant-token-attacks-now-harder-in-azure-ad

因为客户端可以在没有权限分配的情况下获得有效的访问令牌, 授权在您的 API 方面至关重要。 在我们公司,我们有一个默认授权策略,用于检查每个请求是否包含有效的委派权限/范围或有效的应用程序权限/应用角色。 这为我们提供了一个已经保护 API 免受此类令牌影响的基线。 它通常不是唯一应用的授权。 如果支持委派权限,您需要检查用户是否也有权访问他们尝试执行的操作。 毕竟委派/应用权限只说明客户端应用可以做什么。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2020-12-09
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多