Azure Active Directory B2C 全局标识框架
Azure Active Directory B2C 是一个客户标识访问管理 (CIAM) 解决方案,每天能够支持数百万用户和数十亿次身份验证。 它负责身份验证平台的缩放和安全性,并监视和自动处理拒绝服务、密码喷射或暴力攻击等威胁。
Azure Active Directory B2C (Azure AD B2C) 是一项独立于 Microsoft Entra ID 的服务。 它基于与 Microsoft Entra ID 相同的技术进行构建,但用途不同。 企业可以使用它来构建面向客户的应用程序,然后让客户自助注册应用程序。
Azure AD B2C 是全球分布式服务,由多个组件构成:
创建 Azure AD B2C 解决方案时,必须提供一个位置来托管服务。 此位置仅与存储用户配置文件数据的区域相关,而处理登录的其余服务在全球运行。
通常会在离用户群最近的区域部署 Azure AD B2C 租户。 这样可以更轻松地遵守数据驻留法,因为用户配置文件仅在所选区域中复制。 这还可以在登录期间提供最佳性能,因为网络延迟已针对目录存储进行了优化。
当你的 Azure AD B2C 目录需要为全球用户提供服务时,区域结构会带来挑战。 必须确定要在哪个位置创建 Azure AD B2C 租户。 选定区域之外的任何用户可能不符合数据驻留要求,并且在验证其凭据或读取其用户配置文件数据时也可能会遇到延迟增大的情况。
例如,假设某个应用程序为澳大利亚和北美的用户提供支持,并且 Azure AD B2C 目录是在北美区域创建的。 从澳大利亚登录的用户可能需要更长的处理时间才能完成身份验证。
为了更好地满足数据驻留要求并缓解性能问题,必须部署多个 Azure AD B2C 租户。 通过在运营业务的每个区域放置一个租户,目录中的操作将针对延迟进行优化。 但是,如果这样做,那么对于在每个区域中配置、管理和保护这些敏感的租户资源,解决方案会产生其他开销。 其他开销包括:
租户管理
租户隔离,这会导致最终用户体验不统一
计费
用于管理策略/应用程序注册/密钥的 CI/CD 流程
本文档将推荐 Azure AD B2C 的体系结构,它们最适合为全球用户提供服务的客户的解决方案。 这些解决方案满足以下要求:
用户可以维护同一组凭据,无论他们从全球的哪个位置访问应用程序。
无论用户从何处进行身份验证,均能保持一致的性能和延迟。
客户能够以尽可能少的配置轻松向其开发人员团队交付流程、框架或 SDK。
当用户在世界各地旅行时可以维护用户配置文件。 这在任何服务中的用户交互生成的分析中创造了更多价值。
客户用户数据存储在区域数据存储中。
下面是在使用 Azure AD B2C 租户为全球运营业务模型实现标识平台时要考虑的两种方法。
第一种方法使用地理区域作为边界,应用程序专门针对该区域进行配置。
第二种方法具有应用程序的全局边界,并使用额外的 Azure AD B2C 租户来协调区域租户之间的交互。
区域租户业务流程
在此模型中,应用程序要么按区域托管,要么通过按区域配置连接到区域租户。 应用程序直接将用户发送到特定区域的租户。 当用户可能已经前往其他区域时,跨租户通信用于执行跨租户身份验证或跨租户的配置文件更新。
漏斗租户业务流程
在此模型中,Azure AD B2C 租户将用户汇集到区域 Azure AD B2C 租户。 漏斗租户充当其他 Azure AD B2C 租户的重定向业务流程协调程序。 这是由 Azure AD B2C 服务的全局分布式组件处理的,因此性能不受影响。 此重定向是使用 OpenId Connect 标识提供者联合执行的。
跨租户通信用于执行跨租户身份验证,或跨租户的配置文件更新。 漏斗租户为应用程序提供了单个可与之通信的终结点。
用来为解决方案建模的体系结构需要根据所述的两个模型之间的利弊做出选择。 例如,漏斗模型使你能够维护应用程序的单个实例。 以下部分介绍了可能影响所选设计的功能、选择标准和性能。
功能和注意事项
下表描述了基于区域的设计与基于漏斗的设计提供的功能:
功能 | 基于区域 | 基于漏斗 |
---|---|---|
支持本地帐户注册和登录 | ||
支持联合帐户注册和登录 | ||
支持对从注册区域之外登录的用户的本地帐户进行身份验证 | ||
支持使用基于跨租户 API 的查找对从注册区域之外登录的用户的联合帐户进行身份验证 | ||
防止从多个不同区域注册 | ||
每个区域中的应用程序都有一组要连接的终结点 | ||
所有应用程序连接到一组终结点,无论它们托管于哪个区域 | ||
支持精细条件访问策略。 | ||
针对成本进行优化。 |
根据功能,必须考虑以下因素:
使用基于区域的方法时,主要考虑因素是该方法要求跨多个区域的应用程序为每个区域 Azure AD B2C 租户具有各自的配置。
使用基于漏斗的方法时
有双重令牌成本
引入了额外的 HTTP 重定向
许多租户需要自定义域
条件访问在租户级别而不是应用程序级别应用
通过多个 IdP 进行单一退出登录可能会带来挑战
选择的方法取决于托管的应用程序数量和访问应用程序的具体要求。
性能
在基于区域或基于漏斗的配置中使用多个租户的性能优势将是对全球运营业务使用单个 Azure AD B2C 租户的改进。
使用基于漏斗的方法时,漏斗租户位于一个特定的区域中并为全球的用户提供服务。 由于漏斗租户操作使用 Azure AD B2C 服务的全球组件,因此无论用户从何处登录,它都保持稳定的性能水平。
如上图所示,基于漏斗的方法中的 Azure AD B2C 租户仅利用策略引擎执行到区域 Azure AD B2C 租户的重定向。 Azure AD B2C 策略引擎组件是全球分布的。 因此,无论在何处预配 Azure AD B2C 漏斗租户,漏斗在性能方面都不受限制。 由于在基于漏斗的方法中漏斗和区域租户之间存在额外的重定向,因此性能会有损失。
在基于区域的方法中,由于每个用户都被定向到其最近的本地 Azure AD B2C,因此,对于登录的所有用户,性能都很稳定。
区域性租户将对目录存储执行目录调用,目录存储是基于漏斗的体系结构和基于区域的体系结构中都存在的唯一区域化组件。
仅当用户在与其注册时所在不同的区域执行身份验证时,才会遇到额外的延迟。 这是因为,将跨区域进行调用以访问其配置文件所在的目录存储以完成身份验证。