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

lx0bsm1f  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(125)

我的任务是构建一个多租户产品平台,我很难决定应该如何实现身份验证和授权。主要是我对AAD功能和最佳实践感到困惑。这个项目不是针对大企业的,而是一个小规模的格林菲尔德项目。我正在寻找关于身份验证和授权架构的问题的答案和反馈。
我有一些要求要满足:
R1.无本地用户,所有用户均属于外部公司,应使用其当前IdP(Google、Microsoft帐户)进行身份验证。
R2.良好的安全实践(零信任和粒度访问管理RBAC)
x1c 0d1x因此,我目前的理解是,为了实现上述云资源之间的安全通信,我应该利用从上图中的“我的公司AAD”发布的托管身份(系统分配)。
问题/声明:
1.为了验证用户而不需要存储他们的数据,我认为我应该使用AAD B2C。在这个AAD B2C中,我将添加一个类似于“MyCompanyB 2C”的新租户,我不应该在AAD B2C中为我们签署的每个新客户添加一个新租户,对吗?
1.我是否需要与外部IdP联合才能使企业帐户用于登录?
1.我是否在AAD B2C中定义RBAC的自定义范围?(例如,“声明为scopes: "users/read"的用户可以读取用户数据”)
1.即使我的客户可以使用不同的IdP,来自我的AAD B2C的访问令牌是否会共享统一格式?(即,我的应用是否可以使用单一的统一授权方法,我不必在应用授权中支持“Google访问令牌和Microsoft访问令牌”)。
1.为了不向所有下游依赖项所需的所有范围的用户发出“全能访问令牌”,服务应该只使用为微服务发出的令牌(其范围用于依赖服务)来调用彼此。如果我们已经在资源之间实现了托管标识,这是必要的吗?
1.“AAD B2C”是负责发放OIDC接入令牌的授权/认证服务器吗?
参考文献:
Apply the verify explicitly Zero Trust principle to your API implementation

xmakbtuz

xmakbtuz1#

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

第1条

AAD B2C是一个授权服务器(AS),这是您需要的角色。它属于您并保护您的数据。它可以通过多种方式验证用户,包括外部IDP,例如Google。外部登录后,通常在AS中创建用户记录。
登录后,您将使用包含主题声明的访问令牌调用API。然后您需要针对用户存储业务资源吗?例如购买的产品?如果需要,您需要一个稳定的主题声明-这是值得考虑的。

第2款

AS可以联合到企业IDP(如果提供)。如果企业选择不提供IDP,则可以为它们提供由AS管理的默认登录方法,例如口令。这将在AS中存储用户记录。

第三条

是-自定义范围和声明在AS中定义,您可以在AS中控制它们。它们被颁发给访问令牌,您可以在API中使用它们来控制访问。在您的情况下,您可能需要tenant_id声明,因此您需要考虑如何将租户分配给用户。

A4格式

是的--这是使用AS的一个关键点。您的应用运行一个代码流到AS,AS接收外部令牌,然后向您的应用发出AS令牌。

第五条

管理来自同一所有者的微服务的最佳方式通常是在它们之间转发访问令牌。这以可审计的方式传递用户身份,并在每个API中启用基于用户的授权。它应与API中作用域和声明的良好使用以及将作用域分配给客户端相结合。例如,如果客户端被赋予作用域orders shipping,则其访问令牌在发送到支付API时将被拒绝。

第6条

是-同上。

相关问题