如何在使用Azure AD认证的Blazor Server应用中设置Cookie过期时间?
Blazor Server + Azure AD 闲置超时配置问题
我创建了一个简单的.NET 6 Blazor Server应用,按照教程配置了Azure AD认证,功能运行正常。但应用闲置数小时后再次使用时,并未要求重新登录。我注意到生成的.AspNetCore.Cookies采用会话过期机制,推测需关闭浏览器才能触发重新登录,但我希望设置闲置超时时间。请问该配置需在Azure AD中完成,还是在应用代码中实现?
我的App.razor已用<CascadingAuthenticationState>包裹,appsettings.json中配置了AzureAd参数。以下是Program.cs中的代码:
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")); builder.Services.AddControllersWithViews() .AddMicrosoftIdentityUI(); builder.Services.AddAuthorization(options => { // By default, all incoming requests will be authorized according to the default policy options.FallbackPolicy = options.DefaultPolicy; }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.Run();
配置方案说明
闲置超时的配置需要同时在应用代码和Azure AD中配合设置,两者各司其职:
1. 应用代码层面:配置Cookie滑动过期
你需要在添加认证服务时,给Cookie设置滑动过期规则和有效期,用户闲置超过设定时间后,Cookie失效就会触发重新登录。修改Program.cs里的认证配置部分:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .AddCookie(options => { // 开启滑动过期:用户有操作时自动延长Cookie有效期 options.SlidingExpiration = true; // 设置闲置超时时间,示例为30分钟 options.ExpireTimeSpan = TimeSpan.FromMinutes(30); // 可选:设置绝对过期时间,比如8小时,确保用户每天至少重新登录一次 options.AbsoluteExpiration = DateTimeOffset.UtcNow.AddHours(8); });
2. Azure AD层面:调整令牌过期时间
Azure AD颁发的ID令牌和访问令牌默认有效期是1小时,你可以在Azure门户里调整这个时间:
- 登录Azure门户,找到你的Azure AD应用注册
- 进入令牌配置页面,设置ID令牌和访问令牌的过期时间(范围10分钟到24小时)
- 注意:令牌过期时间要和应用Cookie的有效期匹配,避免令牌先失效引发认证错误
额外提示:Blazor Server的SignalR连接
Blazor Server靠SignalR维持长连接,要确保连接不会绕过认证。你已经用了<CascadingAuthenticationState>,没问题,还可以在_Host.cshtml顶部加@attribute [Authorize],确保页面加载时就验证用户状态。
内容的提问来源于stack exchange,提问作者Rocket04
相关产品推荐
相关产品推荐

