多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
相关产品推荐
相关产品推荐

