如何让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
相关产品推荐
相关产品推荐

