我发现在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时,它将停止工作。它就像它们不兼容,或者我可能错过某个地方的设置
答案 0 :(得分:0)
我认为你必须将两个应用程序的Web.config中的machineKey设置为相同的值。您可以在此处生成计算机密钥部分:http://aspnetresources.com/tools/machineKey
答案 1 :(得分:0)
我们无法找到任何方法,因此我们必须将我们的其他项目转换为使用.net 4集成应用程序池。