基于AAD与AAD B2C的Azure授权架构合理性咨询及问题
背景概述
小型绿地多租户产品平台,核心需求如下:
- R1:无本地用户池,所有用户通过外部企业IdP(Google、Microsoft账户)完成认证
- R2:遵循零信任、细粒度RBAC等安全最佳实践
- 当前规划:使用自有AAD租户的系统分配托管标识实现云资源间安全通信
问题解答
为实现无需存储用户数据的身份认证,计划使用AAD B2C单租户(如"MyCompanyB2C"),无需为每个客户单独创建租户,此理解是否正确?
完全正确。AAD B2C的核心设计目标之一就是支持单租户对接多外部IdP,无需为每个客户单独搭建租户;且默认仅保留外部用户的必要关联信息(而非核心身份数据),完美匹配你无需存储用户数据的需求。是否需要与外部IdP建立联合身份验证,以支持企业账户登录?
需要。AAD B2C本身不具备直接处理外部企业账户认证的能力,必须通过联合身份验证配置对接Google Workspace、Microsoft Entra ID等外部IdP,外部企业用户才能使用自身现有账户完成登录,无需在B2C中重新注册。是否需在AAD B2C中定义RBAC的自定义范围(例如:拥有
scopes: "users/read"声明的用户可读取用户数据)?
需要,更准确地说,需在AAD B2C的应用注册中定义**自定义权限范围(Scopes)和应用角色(App Roles)**来实现细粒度RBAC。你举例的users/read属于资源级权限范围,定义后可通过用户流或自定义策略将对应权限声明注入访问令牌,服务端通过校验令牌中的scp或roles字段完成权限判断。即便客户使用不同IdP,AAD B2C颁发的访问令牌是否格式统一?即应用是否可采用单一授权方式,无需同时兼容Google和Microsoft访问令牌?
是的,格式完全统一。无论用户通过哪个外部IdP登录,AAD B2C都会作为统一身份代理,向应用颁发符合OIDC/JWT标准的格式一致的访问令牌。你的应用只需校验B2C颁发的令牌即可,无需单独处理Google或Microsoft的原生令牌。若已在资源间实现Managed Identites,是否仍需让服务仅使用针对微服务颁发的、含依赖服务范围的令牌调用彼此,避免颁发“全能访问令牌”?
需要。托管标识主要用于云服务(如Azure VM、Function)与Azure原生服务(如Storage、SQL)之间的身份认证;而微服务间的调用,依然要遵循零信任的“最小权限”原则,使用基于范围的访问令牌——每个服务仅请求自身所需的依赖服务权限范围,避免过度授权。托管标识与服务间令牌授权是互补关系,而非替代。AAD B2C是否为负责颁发OIDC访问令牌的身份认证/授权服务器?
是的,AAD B2C是完整的OIDC认证与授权服务器,可直接颁发符合OIDC标准的ID令牌、访问令牌和刷新令牌。它既处理身份认证流程,也会根据配置的权限规则生成包含正确声明的授权令牌,完全覆盖你的认证与授权需求。
内容的提问来源于stack exchange,提问作者Equestre

