gpt4 book ai didi

c# - MVC 5 经过身份验证的用户正在注销,没有 "remember me"(ExpireTimeSpan/MachineKey/Session Timeout)

转载 作者:太空狗 更新时间:2023-10-30 01:31:45 26 4
gpt4 key购买 nike

前言:我读过这个(ASP.NET MVC membership - user being logged out frequently - don't know why)和这个(ASP.NET Identity 2 Remember Me - User Is Being Logged Out)和这个(ASP.NET 5 Identity 3 users get signed out after some time)和这个(User gets logged out with 'Remember me')。

我在这里有点噩梦。我在 VS 15 中设置了一个样板 MVC5 应用程序。所有内容都已更新到最新版本(特别是 identity.core 和 identity.owin,因为我读到样板 MS 内容存在问题)。

我们注意到,用户在我们的一个应用程序上闲置大约 10-15 分钟后就会注销。我们的用户还报告说“记住我”功能根本不起作用。

我不知道我做错了什么...

启动.Auth.cs:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
SlidingExpiration = true,
ExpireTimeSpan = System.TimeSpan.FromDays(30.0),
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))
}
});

我的配置文件:

<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" lockItem="true" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" slidingExpiration="true" timeout="60" requireSSL="true" />
</authentication>
<compilation targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" />
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>

AccountController 中的身份验证:

    [ValidateAntiForgeryToken]
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}

// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, isPersistent: true, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}

我主要是想给用户一个 30 的滑动 cookie。也就是说,只要他们在 30 天内访问该网站并且没有清除他们的 cookie,他们就不必重新进行身份验证。

如您所见,isPersistent 在登录时设置为 true,因此用户应该始终有效地被视为 rememberMe = true;

我在这里是否遗漏了一些明显的东西,或者我是否完全不了解 isPersistent 和 perpetual login 的工作原理?

如果我做了一些愚蠢的事情,请随意起哄。提前致谢。

注意:我已经修改了配置文件中表单例份验证条目的超时值,与我从测试中看到的相比没有任何变化。

编辑:我和我的托管公司谈过,他们在 15 分钟不活动后回收应用程序池。他们现在已经扩展了。然而,这并不能解决问题。

我认为拥有机器 key 可以确保 cookie 能够存活并回收应用程序?我现在已经放了一个明确的机器 key ,看看它是怎么回事。对于问题的原因以及如何解决它仍然有点难过...

最佳答案

所以出于某种原因(仍然不确定是什么)我的摆弄似乎奏效了。

我最终不得不生成一个明确的机器 key 而不是使用

validationKey="AutoGenerate,IsolateApps" 
decryptionKey="AutoGenerate,IsolateApps"

我还要求我的托管公司延长 IIS 应用程序池空闲回收时间(不确定这是正确的名称,但托管支持人员就是这样调用它的)。

这似乎已经解决了问题,而且经过一整夜的测试,我没有登出。还是有点难过。根据托管公司的说法,应用程序池仍在回收,尽管间隔时间更长。

我现在认为显式机器 key 可能与此有关?但我之前使用过“AutoGenerate,IsolateApps”,它运行良好。

我希望这对其他人有帮助。真的没有时间进行全面测试并删除机器 key 以查看它是否仍然有效。一旦我可以设置一些确定的测试,我会报告。

关于c# - MVC 5 经过身份验证的用户正在注销,没有 "remember me"(ExpireTimeSpan/MachineKey/Session Timeout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39836488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com