基于Azure AD B2C的多租户应用:如何实现租户级访问授权及客户侧用户级细粒度访问控制?
解决方案:Azure AD B2C多租户应用的客户侧细粒度用户访问管控
这个场景完全支持,而且正好匹配你想要的「我方仅授予租户级访问权限,客户自主管控内部用户」的需求!核心的技术术语包括企业应用程序(Enterprise Application)、用户分配要求(User assignment required)和服务主体(Service Principal),具体实现步骤如下:
核心原理
当你的应用在客户Azure AD租户中创建服务主体后,默认配置是允许该租户内所有用户登录。通过修改服务主体对应的企业应用设置,客户可以开启「用户分配要求」,强制只有被显式授权的用户/安全组才能访问你的应用——这一步完全由客户租户管理员自主操作,不需要你的组织介入。
客户侧实现步骤(无需我方参与)
客户的Azure AD管理员只需在自己的租户内完成以下操作:
- 登录Azure门户,进入「企业应用程序」页面,搜索并找到你的应用对应的服务主体(通常以你的应用名称命名)。
- 进入该企业应用的「属性」页面,将「用户分配要求」选项设置为是。这一步是关键,开启后未被分配的用户会被Azure AD直接拦截登录请求。
- 切换到「用户和组」页面,点击「添加用户/组」,选择需要授权访问你的应用的内部用户或安全组;同时可以移除已分配但不再需要访问的用户/组。
我方应用侧的注意事项
- 你不需要修改Azure AD B2C的用户流或自定义策略:当客户开启「用户分配要求」后,未授权的用户在尝试从客户Azure AD联合登录时,会直接被客户的Azure AD拒绝,根本无法进入你的B2C登录流程。
- 如果你的应用需要在内部做额外的权限验证,可以通过Microsoft Graph调用客户租户的API,检查当前用户是否被分配到该服务主体,但一般情况下不需要——Azure AD的拦截已经足够。
补充说明
- 客户租户内被授权的用户登录后,依然会在你的Azure AD B2C租户中创建消费者账户,但如果客户后续移除了该用户的授权,该用户将无法再登录你的应用,即使B2C中仍存在其账户。
- 这种管控方式完全符合多租户应用的最佳实践,既保证了租户级的访问授权,又让客户拥有内部用户的细粒度管控权。
内容的提问来源于stack exchange,提问作者jokarl




