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

在ASP.NET Core OIDC认证中如何根据自定义字段设置Cookie持久性?

解决方案:在ASP.NET Core客户端中根据OIDC自定义Token字段设置持久化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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:03:25