使用不同的应用程序池单点登录无法正常工作?

时间:2011-07-01 14:57:30

标签: http authentication cookies iis-7 application-pool

我发现在IIS 7下创建了2个新网站,单个登录身份验证在不同的应用程序池中运行时不起作用。当我将应用程序移动到同一个池中时,我可以登录其中一个并登录另一个。当我在其中一个上更改应用程序池时,我没有登录第二个。

是否可以在machine.config文件中设置任何设置以允许它们通过应用程序池共享相同的cookie?


实施例。 1: proj1(app pool .net 2)

proj2(app pool .net 2)

=单点登录有效,它们共享相同的身份验证Cookie。


实施例。 2: proj1(app pool .net 2)

proj2(app pool .net 4,integrated / classic)

=单点登录不起作用,它们不共享相同的身份验证cookie。


实施例。 2: proj1(app pool .net 4,integrated / classic)

proj2(app pool .net 4,integrated / classic)

=单点登录有效,它们共享相同的身份验证Cookie。


原帖

底部的最新更新

我有2个项目,一个是asp.net webforms,另一个是mvc 3项目。

我按照本指南,在底部看到,我在计算机上工作了。但是当我将它上传到服务器时,它不再起作用了。我能想到的差异是,1)在服务器上我们使用SSL,2)webforms项目使用.net 2而MVC项目使用.net 4(集成模式)和3)我使用IIS 7服务器和我使用VS 2008/2010在我的本地计算机上测试它。

asp.net MVC 3(.net 4)

<forms name=".ASPXAUTH" loginUrl="~/Home/Login" timeout="30" enableCrossAppRedirects="true" domain=".mydomain.com" ticketCompatibilityMode="Framework20" />

Webforms(.net 2)

<forms name=".ASPXAUTH" loginUrl="Default.aspx" defaultUrl="Default.aspx" timeout="30" domain=".mydomain.com" enableCrossAppRedirects="true" />

有趣的是,我上传了一个test.aspx页面到Mvc(.net 4)和webforms(.net)项目,只显示了一些痕迹。

两个项目都具有相同的sessionid和.ASPXAUTH。在我的localhost上,我可以访问mvc项目上的ASPXAUTH但我无法在服务器上访问它。

项目作为子域名运行,mvc.mydomain.com和webforms.mydomain.com。

有人对如何解决这个问题有任何想法吗?我可以完全访问IIS 7.0。

(我也试过关闭服务器上的SSL,但我仍然得到相同的结果)

身份验证共享指南: http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

更新 我也试过这个:(webforms .net 2.0)

var ticket = new FormsAuthenticationTicket(1, "authtest", DateTime.Now, DateTime.Now.AddMinutes(30), false, login.Email);
var enc = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie("authcookie", enc) {Domain = ".mydomain.com"};
Response.Cookies.Add(cookie);

和mvc 3(.net 4)

FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(HttpContext.Request.Cookies["authcookie"].Value);
ViewBag.User = "User: " + ticket.Name;

这会引发以下错误:“要解密的数据长度无效。”

第6次更新

有趣!当我添加2个在.net 2下运行的新域名时,它可以完美运行。但是,当我将应用程序池更改为.net 4时,它将停止工作。它就像它们不兼容,或者我可能错过某个地方的设置

2 个答案:

答案 0 :(得分:0)

我认为你必须将两个应用程序的Web.config中的machineKey设置为相同的值。您可以在此处生成计算机密钥部分:http://aspnetresources.com/tools/machineKey

答案 1 :(得分:0)

我们无法找到任何方法,因此我们必须将我们的其他项目转换为使用.net 4集成应用程序池。