2017-09-15 262 views
1

我试图获得一个持久连接,所以用户只需要使用一次他们的密码。我使用过这个文档:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x,但用户在一段时间后仍然断开连接。Asp.net核心持久身份验证 - 自定义Cookie身份验证

await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme, 
        principal, 
        new AuthenticationProperties 
        { 
         IsPersistent = true 
        }); 

我该怎么做才能获得真正持久的连接?

回答

1

根据文档,IsPersistent授予的持久性仅意味着认证将通过浏览会话持续(即,即使浏览器关闭时也会保留)。您需要持久性的组合以设置Cookie的到期时间。可以通过使用ExpireTimeSpan选项通过CookieAuthenticationOptions (MSDN)设置cookie的到期日期。

没有持久性,认证到期可以使用AuthenticationOptions的ExpiresUtc选项

+0

设置,好吧,我想试试。只是一件事,文档说:ExpiresUtc和IsPersistent属性是相互排斥的。这不就是说我不能同时使用两者吗? – GlobalFx

+0

@GlobalFx因此即使用户没有关闭浏览器,绝对到期(通过ExpiresUtc)也会拒绝设置的cookie。 _IsPersistent_表示用户的身份验证生命周期由CookieAuthenticationOptions决定。 设置isPersistent为false意味着用户只能通过当前浏览会话的身份验证,浏览器关闭时会被清除。 –

+0

好的,所以解决方法是将_IsPersistent_设置为true并将_ExpireTimeSpan_设置为_ConfigureServices_中的一年,而不设置_ExpiresUtc_。用户只需要每年登录一次吧? – GlobalFx