- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
前言:我读过这个(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/
我正在使用 .net 4.5 和 MachineKey.Protect/MachineKey.Unprotect 来加密和解密值。我想知道当我们将代码部署到我们将拥有多个服务器的生产环境时,Machi
我们有一个 .NET 4.5.x oss application我们正在使用 git deploy 部署到 azure 网站。我们有一个构建服务器,它将工件提交到 git 存储库,然后我们将它用于 g
我在哪里可以找到 machineKey ASP.NET 的配置部分? 我的申请中没有 Web.config , 根目录中没有 Web.config而我的 machine.config 中没有. 这是否
在该方法的官方描述中,微软在以下链接中解释说 MachineKey.Protect“通过加密或签名来保护指定的数据”:https://msdn.microsoft.com/en-us/library/
我使用 MachineKey.Protect() 方法来加密在我的 asp.net MVC 应用程序中作为查询字符串传递的 id。 这是我用来加密/解密的代码: public static strin
在 ASP.NET 中可以设置 machineKey以编程方式设置? 我们使用的 Web 应用程序存储在数据库中加密的敏感信息,因此如果我们可以将解密 key 放在那里,它会很方便。 最佳答案 不;
对于 IIS 托管的 ASP.NET MVC 4 网站,我想在运行时在代码中动态调整机器 key 。 机器 key 、加密和验证 key 以及要使用的算法都存储在数据库中。我不想从 web.confi
我正在使用 Machinekey.Protect 和 Machinekey.Unprotect 来加密我的应用程序中的值。一位潜在客户正在执行安全审计,并询问了这种方法使用的加密算法,我正在努力使用谷
我想在 ASP.NET MVC 应用程序中加密一些数据,以防止用户篡改它。我可以使用密码学类来进行实际的加密/解密,没有问题。主要问题是确定在哪里存储加密 key 并管理对其的更改。 由于 ASP.N
" validationKey 到底有什么作用?假设我使用 SHA1 创建一个哈希值。 validationKey 如何发挥作用? 考虑这段代码: HMACSHA1 hashSha = new HMA
机器 key 在 asp.net 中有哪些不同的用途?我认为以下是正确的,但认为可能还有更多。 多个应用程序可以使用同一个 cookie 多个服务器可以使用相同的 View 状态 最佳答案 Machi
我想加密我在 cookie 中使用的 ID。我正在使用 ASP.NET 4.5,所以我想使用 MachineKey.Protect 来完成它。 代码 public static string
将 ValidationKey 和 DecryptionKey 保留为默认值时生成的默认 key 长度是多少?例如: 我无法在 MSDN 上的任何地方找到此文档。 我想生成一个静态机器 key 并使
我想将 machineKey 添加到我的 machine.config 中,因为我正在使用 Web 农场场景中的 web.config 连接字符串的编程加密。 我的问题是,我应该将 machineKe
我们(实际上是我们的 IT 合作伙伴)最近为我们拥有的网络农场站点更改了一些 DNS,以便两台生产服务器在它们之间进行循环 DNS 切换。在此切换之前,我们实际上并没有遇到 WebResource.a
考虑到 System.Web.Security.MachineKey 使用本地计算 secret 钥来加密和解密同一框中的文本。如果我通过网络将加密文本发送到另一台计算机,我将如何使用此方法。远程计算
考虑 System.Web.Security.MachineKey 使用本地机器 key 来加密和解密同一个框中的文本。如果我通过网络将加密文本发送到另一台计算机,我将如何使用此方法。远程计算机将如何
MSDN : machineKey Configures algorithms and keys to use for encryption, decryption, and validation o
我需要在 ASP.NET(控制台应用程序、Powershell 等)之外加密一个 cookie,但由于这个 cookie 最终会被我的 MVC 应用程序读取,因此需要使用相同的 key 对其进行加密。
在我的 web.config 文件中,我有以下条目: 我需要使用 web config 转换方法交换某些 web 发布配置文件下的 validationKe
我是一名优秀的程序员,十分优秀!