kam*_*ens 8 asp.net iis forms-authentication web-config global-asax
(有关更多背景,请参阅下面的问题):
是否有任何情况
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"/>
Run Code Online (Sandbox Code Playgroud)
在web.config中,无法在App Pool上自动生成新的machineKey回收?这是我看到的行为......
我在MVC应用程序中使用标准的ASP.NET FormsAuthentication.如果我在使用中登录用户FormsAuthentication.GetAuthCookie并且不使用持久性cookie(依赖于浏览器的会话来记住我的授权状态),我希望回收IIS应用程序池以使会话对此cookie的了解无效......然后注销所有没有持久性cookie的用户.
这可能发生在我的一个IIS安装(XP)上,但在不同的IIS配置(服务器2K3)上,FormsAuthentication cookie(在标准名称".ASPXAUTH"下)仍然有效并继续授权用户.
有谁知道为什么会发生这种情况或什么配置控制这种行为?
显然,回收应用程序池无法控制浏览器是否仍然发送.ASPXAUTH cookie(只要我没有关闭浏览器并且cookie没有过期).
如果IIS安装在回收后正确拒绝身份验证,我可以Request.Cookies在Application_BeginRequest事件期间看到传入的cookie ...但是一旦控件移动到Global.asax.cs中可用的下一个事件(Application_AuthenticateRequest,cookie就被删除了来自Request.Cookies收藏.
为什么IIS/ASP.NET配置都不会发生这种情况?
如果不清楚,形成问题的更简单方法是:
为什么HttpContext.Current.Request.Cookies[".ASPXAUTH"]从改变{System.Web.HttpCookie}到零的时候我一步,在一个单一的要求,从Application_BeginRequest到Application_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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
...然后在我回收IIS应用程序池之前的请求期间,不会捕获任何异常.回收IIS应用程序池后,当从浏览器发送完全相同的.ASPXAUTH cookie时,将捕获加密异常("填充无效且无法删除.")
为什么是这样?
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |