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

如何让Azure B2C认证用户重启ASP.NET Core MVC应用时强制重认证?

实现Azure B2C登录后关闭浏览器强制重认证的方案

1. 修改ASP.NET Core认证Cookie配置

默认情况下,Microsoft Identity Web会创建持久化认证Cookie,导致浏览器关闭后Cookie仍保留。需将其改为会话级Cookie,关闭浏览器即失效:

在Program.cs(.NET 6+)或Startup.cs的认证配置中添加以下设置:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAdB2C", options);

        // 配置会话级Cookie,关闭浏览器自动失效
        options.Cookie.HttpOnly = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
        options.Cookie.Expiration = TimeSpan.Zero; // 依赖会话超时
        options.Cookie.SameSite = SameSiteMode.Lax;
        
        // 禁用持久化Cookie
        options.UsePersistentCookie = false;
        
        // 设置会话超时时间(可根据需求调整)
        options.SessionCookie.ExpireTimeSpan = TimeSpan.FromMinutes(1);
    })
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

2. 调整Azure B2C用户流会话策略

Azure B2C自身的用户会话可能会绕过应用端的Cookie设置,需修改B2C_1_SignIn用户流的会话属性:

  • 登录Azure门户,进入你的B2C租户
  • 打开用户流,选择B2C_1_SignIn流程
  • 切换到属性标签,找到会话行为:
    • 将**Web应用会话生存期(分钟)**设为较短值(如1分钟)
    • 把会话令牌类型改为临时
    • 开启强制登录并设置为始终

3. 强制OpenID Connect每次请求都显示登录页

通过添加prompt=login参数,强制Azure B2C忽略现有会话,每次都要求用户重新认证:
在AddMicrosoftIdentityWebApp的配置中添加OpenID Connect事件:

options.Events = new OpenIdConnectEvents
{
    OnRedirectToIdentityProvider = context =>
    {
        // 每次跳转至B2C时,强制显示登录页面
        context.ProtocolMessage.Prompt = "login";
        return Task.CompletedTask;
    }
};

验证效果

完成配置后,用户关闭浏览器/标签页后短时间内重新打开应用,会被直接导向Azure B2C登录界面,必须重新输入账号密码才能访问。若需更严格的控制,可结合前端beforeunload事件发送请求清除服务器端会话(注:浏览器关闭事件不可靠,仅作辅助)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:20:35