You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从IdentityServer4迁移至Azure AD:能否配置单实例多租户并支持acr_values参数?

问题

我们目前使用定制化的IdentityServer 4,基于OpenID Connect(OIDC)规范实现了多租户功能,该规范包含acr_values查询参数。在重定向到身份提供商时,我们会在URL中传入&acr_values=tenant:acme作为查询参数。现在计划从IdentityServer 4迁移至Azure Active Directory(AAD),请问能否配置单个AAD实例实现多租户,并使用带有tenant键的acr_values查询参数?

解答

单个AAD实例实现多租户的可行性

完全可以通过单个AAD实例实现业务多租户,但AAD的多租户实现逻辑和IdentityServer4存在差异:

  • 若你需要在单个AAD实例内管理多个业务租户(比如acme这类自定义租户),可通过以下方式实现租户隔离与标识:
    • 为每个业务租户创建专属安全组,将所属用户加入对应组,以此区分租户;
    • 为用户或应用添加自定义扩展属性,存储租户标识(如tenantName或tenantId);
    • 利用AAD的条件访问策略、自定义角色,针对不同租户配置差异化的权限与访问规则。
  • 若你指的是允许外部AAD租户的用户登录你的应用,AAD原生支持多租户应用注册,只需将应用配置为接受"任何组织目录中的账户"即可,但这和你原有的业务租户模型逻辑不同,需根据实际需求选择。

acr_values参数的支持情况

AAD支持OIDC规范中的acr_values参数,但对tenant:acme这类自定义键值对的处理有局限:

  • AAD的acr_values主要用于指定身份验证上下文,比如强制MFA(acr_values=urn:microsoft:reqauth:mf)、指定登录方式(acr_values=usernamepassword)等,原生不会识别并处理tenant这类自定义键;
  • 若要传递租户信息,更推荐使用AAD原生支持的方式:
    • state参数:将租户信息加密后存入state,AAD会在回调时原样返回该参数,你可在回调逻辑中解析获取;
    • domain_hint参数:如果每个业务租户对应AAD中的一个自定义域名,可使用domain_hint=acme.com引导用户进入对应租户的登录页;
    • 自定义查询参数:在AAD应用注册中配置允许的额外参数后,可直接传递&tenant=acme这类自定义参数,AAD会在回调时返回;
  • 若坚持要通过acr_values传递租户信息,需借助AAD的自定义策略(如Azure AD B2C自定义策略或AAD身份验证流程扩展)添加解析逻辑,将acr_values中的tenant键映射到租户标识,但这需要额外的开发与配置成本,不如原生方式高效。

总结

  • 单个AAD实例可实现业务多租户,通过安全组、自定义属性或域等方式区分租户;
  • AAD不原生支持acr_values=tenant:acme这类自定义键值对,建议改用state、domain_hint或自定义查询参数传递租户信息,若需使用acr_values则需通过自定义策略扩展实现。

内容的提问来源于stack exchange,提问作者Fred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:15:35