我有一个 ASP 4.0 Web 表单应用程序和一个 ASP MVC 4.5 应用程序,我需要在它们之间共享表单身份验证。但是,虽然我已经使用 fiddler 确认在对第二个应用程序的请求中设置了身份验证 cookie,但它仍然重定向到登录页面。
我在每个应用程序中都使用了相同的机器密钥,如此处所述。我还创建了新项目来测试这一点,但它们确实有效。
我有一个 ASP 4.0 Web 表单应用程序和一个 ASP MVC 4.5 应用程序,我需要在它们之间共享表单身份验证。但是,虽然我已经使用 fiddler 确认在对第二个应用程序的请求中设置了身份验证 cookie,但它仍然重定向到登录页面。
我在每个应用程序中都使用了相同的机器密钥,如此处所述。我还创建了新项目来测试这一点,但它们确实有效。
问题出在 .NET 4.5 中有加密增强功能,这意味着尽管我为每个应用程序指定了相同的机器密钥,但它们的解密方式不同。新的 ASP 4.5 项目使用 httpRuntime 元素(见下文)将 targetFramework 设置为 4.5,而第二个项目使用 .NET 4.0,因为它没有设置 targetFramework。
<httpRuntime targetFramework="4.5" />
因此,我可以在第二个项目中针对 .NET 4.5,或者,为了避免升级中的任何错误,我可以指定第二个项目在继续使用 .NET 4.0 的同时使用 .NET 4.5 中的加密增强作为机器密钥。
<machineKey compatibilityMode="Framework45" />