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

如何在Abp.io 5.3中配置跨不同Azure门户的多租户Azure AD SSO?

基于域名动态加载OIDC配置实现跨租户Azure AD SSO集成

针对你的场景,完全可以通过动态加载OpenID Connect(OIDC)配置,将外部租户的Azure AD SSO集成到现有Abp.io 5.3 Angular应用中,具体步骤如下:

  • 第一步:维护域名与租户配置的映射关系
    在应用中提前定义域名和对应租户OIDC参数的映射表,可放在环境文件或专门的配置服务中:

    const tenantSSOConfigs = {
      "your-existing-domain.com": {
        clientId: "你的现有租户客户端ID",
        tenantId: "你的现有租户ID",
        clientSecret: "你的现有租户密钥"
      },
      "new-external-domain.com": {
        clientId: "新租户提供的客户端ID",
        tenantId: "新租户提供的租户ID",
        clientSecret: "新租户提供的密钥"
      }
    };
    

    后续根据当前访问的域名(window.location.hostname)匹配对应的配置。

  • 第二步:通过APP_INITIALIZER提前加载动态配置
    Abp.io 5.3的AuthModule支持动态配置参数,利用Angular的APP_INITIALIZER在应用启动时加载对应域名的SSO配置:

    1. 创建一个配置服务,负责加载和提供当前域名的SSO参数:
      @Injectable()
      export class DynamicAuthConfigService {
        private currentConfig: any;
      
        constructor() {}
      
        loadConfig(): Promise<void> {
          const currentHost = window.location.hostname;
          // 匹配配置,无匹配项则 fallback 到原有租户配置
          this.currentConfig = tenantSSOConfigs[currentHost] || tenantSSOConfigs["your-existing-domain.com"];
          return Promise.resolve();
        }
      
        getCurrentConfig() {
          return this.currentConfig;
        }
      }
      
    2. 在app.module.ts中注册服务并配置初始化逻辑:
      // 初始化工厂函数
      export function loadDynamicAuthConfig(configService: DynamicAuthConfigService) {
        return () => configService.loadConfig();
      }
      
      @NgModule({
        imports: [
          // ...其他模块
          AuthModule.forRoot({
            oAuthConfig: {
              // 动态注入 issuer,根据当前租户ID生成
              issuer: (injector) => {
                const config = injector.get(DynamicAuthConfigService).getCurrentConfig();
                return `https://login.microsoftonline.com/${config.tenantId}/v2.0`;
              },
              clientId: (injector) => injector.get(DynamicAuthConfigService).getCurrentConfig().clientId,
              clientSecret: (injector) => injector.get(DynamicAuthConfigService).getCurrentConfig().clientSecret,
              redirectUri: window.location.origin,
              scope: "openid profile email offline_access",
              responseType: "code"
            }
          })
        ],
        providers: [
          DynamicAuthConfigService,
          {
            provide: APP_INITIALIZER,
            useFactory: loadDynamicAuthConfig,
            deps: [DynamicAuthConfigService],
            multi: true
          }
        ]
      })
      export class AppModule {}
      
  • 第三步:配置外部租户的Azure AD应用
    联系新租户的Azure管理员完成以下操作:

    • 将你的Angular应用域名(https://new-external-domain.com)添加到该租户Azure AD应用的重定向URI中,类型选择"SPA",路径为https://new-external-domain.com/auth-callback(Abp默认的OIDC回调路径)。
    • 确保该应用已添加openid、profile、email等必要API权限,且已完成管理员同意(若需要)。
  • 第四步:测试验证

    • 分别在两个域名下访问应用,检查是否自动跳转到对应租户的Azure AD登录页面。
    • 测试登录后的权限验证,确保用户信息能正确获取并同步到Abp应用中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:07:35