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

多ASP.NET MVC Web项目的Azure AD统一身份认证实现咨询

同域名下多ASP.NET MVC项目统一Azure AD身份认证方案

1. 统一Azure AD应用注册配置

所有项目必须使用同一个Azure AD应用注册,不能单独注册。操作如下:

  • 打开每个项目的web.config,确保Azure AD相关参数完全一致:
    • clientId(应用ID)
    • tenantId(租户ID)
    • 在Azure AD应用注册的「身份验证」页面,添加所有项目的redirectUri(比如https://yourdomain.com/home/signin-oidc、https://yourdomain.com/app1/signin-oidc)和postLogoutRedirectUri,确保每个项目的回调地址都被允许。

2. 配置共享认证Cookie

同域名下的项目需要共享认证Cookie,需修改所有项目的web.config:

  • 统一machineKey:所有项目使用相同的验证和加密密钥,确保跨项目能解密同一Cookie。可通过VS包管理器控制台运行aspnet_regiis -gk生成密钥,然后复制到所有项目的配置中:
    <machineKey validationKey="生成的验证密钥" decryptionKey="生成的解密密钥" validation="SHA1" decryption="AES" />
    
  • 配置Forms认证的根域名:让Cookie在整个域名下生效,注意domain前的.:
    <authentication mode="Forms">
      <forms domain=".yourdomain.com" name=".ASPXAUTH" path="/" requireSSL="true" />
    </authentication>
    

3. 同步OWIN OIDC中间件配置

如果项目用OWIN实现Azure AD认证,需在每个项目的Startup.Auth.cs中保持配置一致:

  • 统一ClientId、TenantId,配置Cookie跨应用共享:
    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        ClientId = "你的应用ID",
        TenantId = "你的租户ID",
        CookieManager = new SystemWebChunkingCookieManager(),
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            RedirectToIdentityProvider = n =>
            {
                if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
                {
                    n.ProtocolMessage.PostLogoutRedirectUri = n.Request.Uri.AbsoluteUri;
                }
                return Task.FromResult(0);
            }
        }
    });
    
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        CookieDomain = ".yourdomain.com",
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });
    
    注意:所有项目的AuthenticationType必须完全一致。

4. IIS部署校验

  • 将所有项目部署为同一IIS站点下的应用程序,或绑定相同域名;
  • 确保所有项目的应用程序池均使用.NET 4.8,且身份配置(如ApplicationPoolIdentity)一致;
  • 开启IIS的「匿名身份验证」和「ASP.NET模拟」(按需),确保Azure AD认证中间件优先处理请求。

5. 验证排查

  • 登录home项目后,直接访问其他项目页面,确认无需重复登录;
  • 检查浏览器Cookie,确认.ASPXAUTH或OpenID相关Cookie的Domain为根域名,且在所有子应用路径下存在;
  • 查看项目日志,若出现Cookie解密失败,优先检查machineKey是否统一;若出现回调错误,检查Azure AD注册的redirectUri是否完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:13