ASP.Net MVC5 Identity 2.0 用户需要多长时间进行身份验证?

ASP.Net MVC5 Identity 2.0 How long does a user stay authenticated?

我正在使用 VS2013 生成的标准模板创建 MVC5 应用程序。 这是身份 2.0。

只需对我的 SQL 服务器数据库使用个人用户帐户选项。

这可能不是正确的术语,但是:用户在 cookie 中的授权保持多长时间有效?

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

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

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

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

当从 Angularjs 发出 ajax 调用时,我是否需要处理未授权并将用户重定向回登录?

抱歉我的无知,但是这个会员资格的东西已经转了很多次,大多数 blogs/answers 似乎指的是 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>

实际上 App_Start 文件夹下 Startup.Auth.cs class 设置的 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
});

如果用户执行较长的任务,'validateInterval' 有助于更新 cookie 过期时间,这将避免用户在操作中间注销。

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

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

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

已更新

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

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

这将解决该问题。