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

Azure AD DotnetCore SSO问题:登录一个Web应用引发另一个需重新认证

解决Azure AD + .NET Core Web应用跨应用SSO问题

你遇到的核心问题是两个同租户的Azure AD注册Web应用没有共享Azure AD的全局SSO会话,导致刷新应用时需要重新选择账户。本质是每个应用默认维护独立的本地Cookie会话,未正确关联Azure AD的SSO状态。

1. 调整OIDC认证中间件配置

在Program.cs(或Startup.cs)中,修改Azure AD认证的配置,确保应用利用Azure AD的SSO会话:

基础配置优化

// 注册认证服务
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
// 配置Cookie认证(处理本地会话)
.AddCookie(options =>
{
    // 若两个应用跨域名部署(如app1.example.com、app2.example.com):
    // options.Cookie.Domain = ".example.com"; // 共享根域名下的Cookie
    options.Cookie.SameSite = SameSiteMode.None; // 允许跨站点Cookie传递
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 仅HTTPS环境生效
})
// 配置Azure AD OIDC认证
.AddMicrosoftIdentityWebApp(options =>
{
    builder.Configuration.Bind("AzureAd", options);
    options.SaveTokens = true; // 保存令牌到本地会话,支持后续SSO
    options.UseTokenLifetime = true; // 让本地会话生命周期与Azure AD令牌同步
    // 添加静默认证逻辑,避免重复选择账户
    options.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = context =>
        {
            // 若用户已本地认证,尝试静默获取Azure AD会话
            if (context.User.Identity?.IsAuthenticated == true)
            {
                context.ProtocolMessage.Prompt = "none";
            }
            return Task.CompletedTask;
        }
    };
});

关键配置说明

  • SaveTokens: 将Azure AD返回的令牌保存到本地Cookie,便于后续请求复用SSO状态
  • UseTokenLifetime: 本地会话的过期时间与Azure AD令牌保持一致,避免本地会话提前失效
  • Prompt=none: 触发Azure AD的静默认证流程,若已有SSO会话则自动返回认证结果,无需用户交互
  • Cookie的Domain和SameSite: 若应用跨域名部署,需配置共享Cookie域名并允许跨站点传递

2. 验证Azure AD应用注册配置

  • 确保两个应用注册在同一个Azure AD租户下(你的配置中TenantId一致,已满足)
  • 确认重定向URI(CallbackPath)配置正确,本地开发可使用http://localhost:{端口}/signin-oidc,生产环境必须使用HTTPS地址
  • 检查用户是否对两个应用都有访问权限(你已完成首次授权,此条件已满足)

3. 本地开发环境注意事项

  • 若两个应用使用不同端口,浏览器会将其视为独立站点,本地Cookie无法共享,此时完全依赖Azure AD的全局SSO会话,确保浏览器未禁用第三方Cookie(login.microsoftonline.com的Cookie属于第三方)
  • 测试时可先登录其中一个应用,再直接访问另一个应用的主页,若仍跳转认证页,可清除浏览器缓存后重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:51