<machineKey decryptionKey=“AutoGenerate”… being

2019-07-29 23:55发布

(有关详情,请上下文中的问题):

是否有任何该情况

<machineKey
      validationKey="AutoGenerate,IsolateApps"
      decryptionKey="AutoGenerate,IsolateApps"/>

在web.config中就无法自动生成的应用程序池一个新的machineKey回收? 这是我看到的行为......


我使用在MVC应用标准的ASP.NET FormsAuthentication。 如果我在使用登录用户FormsAuthentication.GetAuthCookie并且不使用永久性Cookie(依靠浏览器会话记住我的授权状态),我希望回收IIS应用程序池无效此cookie会话的知识......因而注销所有用户谁没有永久性Cookie。

这是否会发生在我的IIS安装(XP)中的一个,但在不同的IIS配置(服务器2K3)中FormsAuthentication饼干(在标准名称“.ASPXAUTH”)仍然有效,并继续对用户进行授权。

有谁知道为什么会这样或什么配置控制这种行为?

显然回收应用程序池拥有的浏览器是否仍然发送.ASPXAUTH的cookie无法控制(只要我还没有关闭,我的浏览器,该cookie没有过期)。

在IIS的情况下安装在循环后,妥善否认认证,我可以看到在传入的cookie Request.Cookies期间Application_BeginRequest事件...但一旦控制移动到Global.asax.cs中可用的下一个事件(Application_AuthenticateRequest ) ,饼干已经从删除Request.Cookies收集

为什么这不会发生这两种IIS / ASP.NET配置?


如果这是不明确,形成这个问题的一个简单的方法是:

为什么HttpContext.Current.Request.Cookies[".ASPXAUTH"]从变化{System.Web.HttpCookie}为空时,我步骤,在单个请求中,从Application_BeginRequestApplication_AuthenticateRequest


更多调试信息:

如果我下面的代码附加到Global.asax.cs中的FormsAuthentication_OnAuthenticate事件...

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
    var val = cookie.Value;
    try
    {
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val);
    }
    catch (Exception)
    {
    }
}

...然后在我之前回收IIS应用程序池的请求,也不例外会被抓住。 回收IIS应用程序池后,当完全相同的.ASPXAUTH cookie被从浏览器发送,加密异常被捕获(“填充是无效的不能删除。”)

为什么是这样?

Answer 1:

窗体身份验证cookie什么都没有做与会话状态。



Answer 2:

我们的应用程序是无状态(无会话所需的),但我们有一种情况,一个应用程序池回收导致所有的machineKey加密的cookie无效的服务器环境(上述问题)。 这是因为与每一个循环变化的machineKey,这不应该是这样造成的。

该自动生成修饰符指定ASP.NET生成本地安全机构随机密钥并将存储 (LSA)

https://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

“本地安全机构(LSA)”是指分配给应用程序池的用户,请参阅下面的更多细节,因为这竟然是这个问题。

这个问题在我们使用的是专用的用户帐户运行应用程序池,并简单地创建用户,然后将其分配给应用程序池似乎没有触发注册表部分的创作,其中机关键是那么事实说谎存储。 您可以通过检查注册表验证这个自己

  1. HKLM / SOFTWARE /微软/的Windows NT / CURRENTVERSION / ProfileList文件(用于获取您刚刚创建的用户的SID;如果用户不存在,那么这已经是一个不好的征兆)
  2. HKU / [UserSIDFromBefore] /Software/Microsoft/ASP.NET / ...(计算机密钥应当有存储的)

解决的办法是使创建注册表中的相关部分为登录用户一旦计算机 (正常的Windows登录屏幕) 。 有可能是虽然建立注册表部分更快或更微妙的方式。



文章来源: