ASP.Net MVC5 Identity 2.0用户保持身份验证多长时间?

时间:2015-02-05 09:50:32

标签: asp.net-identity

我正在创建一个MVC5应用程序,从VS2013生成的标准模板开始。 这是Identity 2.0。

只对我的SQL Server数据库使用“个人用户帐户”选项。

这可能不是正确的术语,但是:用户在Cookie中的授权有效期是多久?

Chrome工具会显示我的域名“.AspNet.ApplicationCookie”过期“浏览会话结束时”。

MSDN说(如果我在正确的页面上)“默认情况下,身份验证Cookie对用户的会话仍然有效。”

如果在用户离开浏览器然后点击刷新时重新启动网络服务器,它们仍然经过身份验证会怎样?

我的所有控制器和api控制器都被[授权]锁定,除了登录。

当从Angularjs进行ajax调用时,我是否需要处理Not Authorized并将用户重定向回登录?

对不起我的无知,但这个会员资格已经花了很多次,大多数博客/答案似乎都是指我没有的web.config设置。

我的web.config包含以下内容:

<system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>

1 个答案:

答案 0 :(得分:2)

实际上在App_Start文件夹下的Startup.Auth.cs类上设置cookie的时间到期。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider
    {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    },
    ExpireTimeSpan = TimeSpan.FromHours(8),
    SlidingExpiration = true
});

&#39; validateInterval&#39;如果用户执行将避免用户在操作中间注销的长任务,则有助于更新cookie到期时间。

重新启动网站没有注销用户,我已经测试了这个在azure网站上托管的重新启动网站。

只要您使用默认控制器操作和默认mvc路由,未经过身份验证的用户将被重定向到上面代码部分“LoginPath&#39;”中指定的登录页面。

但是如果我们使用不同的路由插件,单页应用程序的行为会有所不同,在这种情况下,我们必须做一些工作才能获得正确的重定向URL。 (例如,g:处理路由的角度)

<强> 更新

实际上我们只需要担心returnUrl,因为当我们使用http://www.someDomain.com/#/assessments/list/invite类型url时,returnUrl应该是#/ assessment / list / invite,那么用户将被注销,但在再次登录时将被重定向到正确的部分。我已经捕获了Url的哈希部分,并在Login.cshtml中分配给客户端的returnUrl

<script type="text/javascript">
    document.getElementById('ReturnUrl').value = window.location.hash;
</script>

这将解决这个问题。