微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

浏览器每次关闭时如何不让用户重新登录?

如何解决浏览器每次关闭时如何不让用户重新登录?

这可能是一个基本/愚蠢的问题,但我不知道Google的正确关键字。我想要的是,当我通过Web应用程序对用户进行身份验证时,他们可以关闭浏览器,而当他们重新打开浏览器时,他们仍然可以使用我的网站-他们尚未注销(尚未)。

我一直在遵循IdentityServer文档(https://identityserver4.readthedocs.io/en/latest/quickstarts/2_interactive_aspnetcore.html)中的教程,到目前为止,我已经设法使整个IDP-API-Client正常工作。我已经检查了从IDP获得的令牌,该令牌有效期为2周,所以我在这里遗漏了什么,为什么关闭浏览器后却注销了?

我的猜测是我需要将令牌存储到cookie,但是如何保存它,以及如何强制Web应用程序始终检查cookie?

IS4教程具有以下内容

services.AddAuthentication(o =>
{
    o.DefaultScheme = "Cookies";
    o.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc",o =>
{
    o.Authority = "https://localhost:5001";
    o.ClientId = "mymvcclient";
    o.ClientSecret = "mymvcclientsecret";
    o.ResponseType = "code";
    o.Savetokens = true;
    o.Scope.Add("myapi");
    o.Scope.Add("offline_access");
});

我假设这只是在创建一个cookie,但是当用户打开我的Web应用程序时,如何指定它保存令牌并从cookie中读取令牌?

解决方法

为此寻找的最佳术语可能是“持久会话”,或者一般来说只是session management。这是由ASP.NET Core处理的,不是由IdentityServer处理的。有多种机制可以维护服务器上的会话状态,例如,在服务器重新启动时,您不希望丢失所有会话。

我最幸运的是使用ITicketStore interface,它可以将会话持久化到数据库中。 Cookie的结尾是会话ID,该会话ID在每次到期请求时都会得到验证。

,

是的,您的Cookie处理程序中有一个名为ExpireTimeSpan的选项,默认为14天。您只需将其设置为一个值即可将其更改为比任何时间更长的时间:

...
.AddCookie("Cookies",options => {
    options.ExpireTimeSpan = TimeSpan.FromDays(30);
    options.SlidingExpiration = false;
})
.AddOpenIdConnect("oidc",options => {
    ...
    options.UseTokenLifetime = false;
    ...
})...

以上将Cookie的有效期设置为30天,而不是默认的2周。

您还希望确保OIDC中的UseTokenLifetime选项设置为false,我认为这是目前的默认设置。例如,从Identity Server返回的令牌往往寿命很短。如果将其设置为true(以前是默认设置),则它将覆盖您之前设置的任何到期时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。