如何设置身份服务器、Web api 和客户端应用程序的 cookie 过期时间?

问题描述 投票:0回答:2

我是身份服务器新手,对 cookie 管理知之甚少。 我已经使用 IDS4 配置了 Web api 和客户端应用程序。下面是我在身份服务器中的startup.cs

 public void ConfigureServices(IServiceCollection services)
        {
            //...

            var builder = services.AddIdentityServer(options =>
            {
                options.EmitStaticAudienceClaim = true;
                options.IssuerUri = "https://localhost:5001";
            })
            //...
        }

这是我在 web api

中添加身份验证的扩展方法
public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
        {
            services.AddAuthentication("Bearer")
            .AddJwtBearer("Bearer", options =>
            {
                // tell the system base address of identity server
                options.Authority = Configuration["IdentityServerUri"];

                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateAudience = false
                };
            });
        }

这是我在客户端应用程序中添加身份验证的扩展方法

public static void AddCustomAuthentication(this IServiceCollection services, IConfiguration Configuration)
        {
            services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie(options =>
            {
                options.Cookie.Name = "CorpLense.HR.WebClient";
            })
            .AddOpenIdConnect("oidc", options => 
            {
                options.Authority = Configuration["IdentityServerUri"];
                options.SignInScheme = "Cookies";

                options.ClientId = "CorpLense.HR.WebClient"; 
                options.ClientSecret = "***"; 
                options.ResponseType = "code";

                options.SaveTokens = true;
                
                // get claims
                
                // request access to scopes
                

            });

            var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        }

下面是cookies的屏幕截图

观察

我注意到我的客户端应用程序始终保持登录状态。即使第二天它也不会要求我登录。然而,每隔几个小时,我的 Web API 就会抛出 UNAUTHORIZED 响应代码。当我从客户端应用程序注销并再次登录时,API 再次开始正常工作。有些事情告诉我,也许不记名令牌已经过期了。

目标

我只是想知道如何完全控制cookie。我希望客户端应用程序在服务器端的 cookie 过期、web api 端的 cookie 过期或客户端应用程序的 cookie 过期时自动注销。 我还想知道如何控制cookie的过期时间。以及如何刷新不记名令牌(如果它们过期)。

identityserver4
2个回答
0
投票

如果我没记错的话,访问令牌的默认生命周期是 1 小时,您需要实现对刷新令牌的支持,以便在访问令牌即将过期时更新令牌。

您还可以在 AddCookie(...) 中配置客户端 cookie 生存期。

这对你有帮助吗?

参见 https://docs.duendesoftware.com/identityserver/v5/bff/extensibility/tokens/


0
投票

我也面临同样的问题,我的cookie滑动工作得很好,但是当我尝试使用令牌从后端访问端点时,它只会抛出未经授权的错误。不知道为什么,但我猜当前请求中 httpcontext 的令牌过期没有被滑动。我尝试在调用 http 请求之前手动设置它,但在下一个后续请求中它仍然会得到旧的过期时间。当我们滑动 cookie 过期时间时,对于更新令牌过期时间有什么帮助吗?

注意:我们没有使用 duende id,而是使用旧的 ids4

© www.soinside.com 2019 - 2024. All rights reserved.