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

如何在使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:20:39