在ASP.NET Core OIDC认证中如何根据自定义字段设置Cookie持久性?
要实现根据OIDC服务器返回的is_persistent字段设置客户端Cookie的持久化属性,只需两步操作:
1. 从Token响应中提取自定义字段并存储
在AddOpenIdConnect的配置里,通过OnTokenReceived事件捕获token响应里的is_persistent值,存入认证属性:
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { // 保留原有配置... options.Events = new OpenIdConnectEvents { OnTokenReceived = context => { if (context.TokenEndpointResponse?.AdditionalParameters.TryGetValue("is_persistent", out var isPersistentObj) == true && bool.TryParse(isPersistentObj.ToString(), out var isPersistent)) { context.Properties.SetPersistent(isPersistent); } return Task.CompletedTask; } }; })
2. 配置Cookie认证使用持久化设置
在AddCookie的配置中,通过OnSigningIn事件根据存储的属性调整Cookie的持久化特性:
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { // 保留原有配置... options.Events = new CookieAuthenticationEvents { OnSigningIn = context => { if (context.Properties.IsPersistent) { // 持久化Cookie设置30天过期 context.CookieOptions.Expires = DateTimeOffset.UtcNow.AddDays(30); } else { // 非持久化Cookie关闭浏览器即失效 context.CookieOptions.Expires = null; } return Task.CompletedTask; } }; })
注意事项
- 默认情况下,Cookie认证中间件会自动读取
AuthenticationProperties中的持久化设置,显式设置Expires是为了更精准控制Cookie生命周期。 - 确保客户端已正确配置OIDC相关权限,能完整接收Token响应内容。
内容的提问来源于stack exchange,提问作者Parsa99
相关产品推荐
相关产品推荐

