gpt4 book ai didi

cookies - IdentityServer4如何设置服务器cookie过期

转载 作者:行者123 更新时间:2023-12-02 01:02:48 24 4
gpt4 key购买 nike

到目前为止,我已经了解了如何为客户端 webapp 的 cookie 设置过期时间(感谢 v0id):IdentityServer4 cookie expiration

IdentityServer4 实际上使用了两个 cookie - 客户端 cookie 和服务器 cookie(“idsrv”)。

如果我按照此处给出的设置客户端 cookie 过期时间:
IdentityServer4 cookie expiration
然后,当我关闭浏览器并返回需要授权的客户端 webapp 页面时,我被拒绝访问,因为浏览器 session 不再具有服务器 cookie。

所以我需要一种方法来将“idsrv”cookie 过期设置为与客户端相同。

目前,我看到设置服务器 cookie(它被忽略或以某种方式删除)的最佳方法是 IdentityServer4 主机 Startup.cs/ConfigureServices() 方法中的以下代码块:

services.AddIdentityServer(options =>
{
options.Authentication.CookieLifetime = new TimeSpan(365, 0, 0, 0);
options.Authentication.CookieSlidingExpiration = true;
})

这应该将 cookie 的有效期设置为一年后。但是,在“应用程序”选项卡下的 Chrome 开发人员工具中,我看到它仍然有一个过期的默认日期,即 1969 年。

我下载了 IdentityServer4 项目源,删除了 nuget 包,并将源项目添加到我的解决方案中,以便我可以通过它进行调试。

我看到它得到了我在 ConfigureInternalCookieOptions.cs/Configure() 方法中给它的过期时间。它也匹配内部的 DefaultCookieAuthenticationScheme/应用属性。我没有发现任何特定于 IdentityServer 的东西会忽略我设置的到期日期,但它仍然有 1969 年到期。

编辑:我试图将 cookie 设置在 IdentityServer 主机的 AccountController 中,如下所示(有趣的是,微软有一篇关于使用身份验证属性而不使用 AspNet Identity 的好文章: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x - 它在 cookie 中发送信息,“方案"只是 cookie 名称):
在 ExternalLoginCallback() 中:
if (id_token != null)
{
props = new AuthenticationProperties();
props.ExpiresUtc = DateTimeOffset.UtcNow.Add(AccountOptions.RememberMeLoginDuration);
props.IsPersistent = true;
props.StoreTokens(new[] { new AuthenticationToken { Name = "id_token", Value = id_token } });
}

所有服务器端 cookie 都没有设置过期时间(AccountOptions RememberMeLoginDuration 也设置为 365 天)。 “idsrv”和“idsrv.session”仍然有 1969 年到期。

最佳答案

当您在 Startup.cs 中注册 Identity Server 时,您可以配置 Identity Server 的身份验证 cookie 生命周期。 , 像这样:

services.AddIdentityServer(options =>
{
options.Authentication.CookieLifetime = TimeSpan.FromHours(10);
})

注意:您还需要在用户登录时指出 cookie 应该是持久的。如果您使用的是 Quickstart UI,那么您必须在登录屏幕上勾选“记住我”复选框以获取持久 cookie。或者您可以修改代码以始终发出持久 cookie - 如下所示:
HttpContext.SignInAsync(subject, name, new AuthenticationProperties{ IsPersistent = true});

关于cookies - IdentityServer4如何设置服务器cookie过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49367156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com