我有一个带有2.0应用程序的.NET 4.0应用程序。 Web应用程序不在多服务器环境中;只有一台服务器参与提供这些请求。两个应用程序都使用自定义身份验证,两个应用程序都具有相同的machineKey
属性和值。当我访问2.0应用程序时,事件日志显示以下消息:
Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket supplied was invalid.
Event time: 12/2/2011 11:36:49 AM
Event time (UTC): 12/2/2011 5:36:49 PM
Event ID: 2068ad6957964f75885301fc2b58ddfe
Event sequence: 2
Event occurrence: 1
Event detail code: 50201
我尝试在Web.config中的forms元素上将ticketCompatibilityMode
属性设置为Framework20,但这并没有解决问题。由于此错误,用户未被授权,因此通常的对象(HttpContext)没有填充用户信息。
有谁知道如何修复此错误,以便身份验证适用于2.0应用程序? (顺便说一下,我的确计划将2.0应用程序升级到4.0,但此时不能完成此卡)
答案 0 :(得分:5)
如果有人遇到同样的问题,我可以通过在.NET 2.0应用程序的Web.config的<appSettings>
部分添加一些条目来修复此错误。添加的条目是:
<add key="aspnet:UseLegacyEncryption" value="true" />
<add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
编辑(2012-05-04):在服务器上安装安全公告MS11-100后,2.0应用程序再次验证了身份验证。将以下内容添加到4.0应用程序的Web.config中修复了该问题:
<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
答案 1 :(得分:2)
您必须在2个应用程序上拥有相同的框架。
httpRuntime targetFramework =“4.5”
答案 2 :(得分:1)
为了将aport信息用于上一篇文章,我可以将这些密钥添加到 APP (均为4.0)web.config:
<add key="aspnet:UseLegacyEncryption" value="true" />
<add key="aspnet:UseLegacyFormsAuthenticationTicketCompatibility" value="true" />
答案 3 :(得分:0)
此问题还有一个原因。即使在同一台机器上,如果您的某个应用程序具有相同的IIS和相同的.NET框架
<httpRuntime requestValidationMode="2.0" />
然后共享身份验证cookie将无效。
删除requestValidationMode
可解决问题。但有时你不能这样做,它需要留在那里。我还没发现在这种情况下该做什么
答案 4 :(得分:0)
我有同样的问题。在我的情况下,我在同一台服务器上有两个不同的应用程序,两者的名称属性相同。
解决方案是为每个应用程序使用唯一的名称。请参阅此处的模式详情https://msdn.microsoft.com/en-us/library/1d3t3c61(v=vs.85).aspx
这是cookie名称,如果您使用相同的名称,则会覆盖cookie。