使用 AAD 和 AAD B2C 在 Azure 中实现授权,这个架构合理吗?

问题描述 投票:0回答:1

我的任务是构建一个多租户产品平台,我很难决定我应该如何实施身份验证和授权。大多数情况下,我对 AAD 功能和最佳实践感到困惑。该项目不是大型企业,而是小型绿地项目。我正在寻找有关身份验证和授权架构的问题的答案和反馈。

我有一些要求要满足:
R1。没有本地用户,所有用户都属于外部公司,应该使用他们当前的 IdP(Google、Microsoft 帐户)进行身份验证。
R2。良好的安全实践。 (零信任和粒度访问管理 RBAC)

所以我目前的理解是,为了实现我上面的云资源之间的安全通信,我应该利用上图中“我的公司 AAD”发布的托管标识(系统分配)。

问题/陈述:

  1. 为了在不需要存储用户数据的情况下对用户进行身份验证,我认为我应该使用 AAD B2C。在此 AAD B2C 中,我将添加一个类似于“MyCompanyB2C”的新租户,我应该为我们签署的每个新客户在 AAD B2C 中添加一个新租户,对吗?
  2. 我是否需要与外部 IdP 联合才能使企业帐户用于登录?
  3. 我是否在 AAD B2C 中定义 RBAC 的自定义范围? (例如,“声明
    scopes: "users/read"
    的用户可以读取用户数据”)。
  4. 我的 AAD B2C 访问令牌是否会共享统一格式,即使我的客户可以使用不同的 IdP? (即,我的应用程序可以有单一的统一授权方法吗,我不必在我的应用程序 authz 中支持“Google 访问令牌和 Microsoft 访问令牌”)。
  5. 为了不向具有所有下游依赖项所需的所有范围的用户颁发“全能访问令牌”,服务应仅使用为具有相关服务范围的微服务颁发的令牌相互调用。如果我们已经在资源之间实施了托管身份,这是否有必要?
  6. “AAD B2C”是负责颁发OIDC访问令牌的授权/认证服务器?

参考资料:
将验证明确的零信任原则应用于您的 API 实现

azure architecture azure-active-directory authorization openid-connect
1个回答
0
投票

我会根据标准的 OAuth 设计模式来回答这个问题:

A1

AAD B2C是一个授权服务器(AS),这是你需要的角色。它属于您并保护您的数据。它可以通过多种方式对用户进行身份验证,包括外部 IDP,例如 Google。外部登录后,通常在 AS 中创建用户记录。

登录后,您将使用包含主题声明的访问令牌调用 API。那么您是否需要针对用户存储业务资源?例如购买的产品?如果是这样,您需要一个稳定的主题声明 - 值得多考虑一下。

A2

如果提供,AS 可以联合到企业 IDP。如果企业选择不提供,你可以给他们一个默认的由AS管理的登录方式,比如密码。这将在 AS 中存储一条用户记录。

A3

是的 - 自定义范围和声明在您可以控制的 AS 中定义。它们被颁发给访问令牌,您可以在 API 中使用它们来控制访问。在您的情况下,您可能需要

tenant_id
索赔,因此您需要考虑如何将租户分配给用户。

A4

是的——这是使用 AS 的关键点。您的应用程序运行代码流到 AS,它接收外部令牌,然后向您的应用程序颁发 AS 令牌。

A5

管理同一所有者的微服务的最佳方式通常是在它们之间转发访问令牌。这以可审计的方式流动用户身份,并在每个 API 中启用基于用户的授权。它应该与 API 中范围和声明的良好使用以及为客户端分配范围相结合。例如,如果客户端被赋予范围

orders shipping
,如果发送到支付API,其访问令牌将被拒绝。

A6

是的 - 如上所述。

© www.soinside.com 2019 - 2024. All rights reserved.