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>
这将解决该问题。
我正在使用 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>
这将解决该问题。