我有一个基于asp.net 4.0的webform应用程序,部署到两个不同的服务器上。 webform应用程序只有一个Default.aspx及其代码:
protected void Page_Load(object sender, EventArgs e)
{
MachineKeySection section =
(MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
this.Response.Write(section.DecryptionKey);
this.Response.Write("<br />");
this.Response.Write(section.ValidationKey);
this.Response.Write("<br />");
var authToken = "xxxxxx";
//the real token is obviously not xxx, just an example here
this.Response.Write(authToken);
this.Response.Write("<br />");
var ticket = FormsAuthentication.Decrypt(authToken);
if (ticket != null) this.Response.Write(ticket.Name);
this.Response.End();
}
将具有相同web.config的相同代码部署到两个Web服务器。但是,其中一个工作正常,另一个总是将ticket
等于null。如果我删除if (ticket != null)
,则抛出空引用异常。它们具有完全相同的输出,除了票证部分。
Web服务器在Windows Server 2008 R2 SP1上运行,并安装了.NET framework 4。我确定两个Web服务器上的代码完全相同,包括machineKey:
<machineKey validationKey="xxx" decryptionKey="yyy" validation="SHA1" decryption="AES" />
这怎么可能发生?你对这个问题有什么看法吗?
更新
MS BUG,需要更新包:http://support.microsoft.com/kb/2656351
答案 0 :(得分:1)
在使用负载均衡器时,我已经遇到了您提到的这个问题。 [.net Framework 4.0]
所有事情都经过多次验证,但没有成功。
只是想最后分享以下链接安全更新:MS11-100已经解决了我的问题。
Tony认为这可能是.net 4.0 http://tmoaikel.wordpress.com/2012/03/21/formsauthentication-decrypt-returns-null/中的错误,这是由上述修补程序修复的。
可能这可能会帮助你进一步发展。