1
我们有两个单独的MVC 4 Web应用程序,它们作为同一网站的一部分运行。主(父)项目具有身份验证,并且工作正常。现在我们已经将第二个项目添加到同一个站点(一个运行在子框架中的页面),我们无法弄清楚如何使用户通过父应用程序进行授权。在父应用程序和子应用程序之间共享身份验证
两者都使用相同的形式元素在web.config中:
<forms loginUrl="~/Account/LogOn" name=".ASPXFORMSAUTH" domain="..." protection="All" timeout="2880"/>
我需要比孩子项目的[授权 - 标签吗?
[Authorize]
public class HomeController : Controller
{
...
public ActionResult Index()
{
return View();
}
...
}
大概是不用说了,如果我尝试访问该子项目的HomeController中,即使用户在父项目登录页面被重定向到登录页面。
这两个项目都使用相同的machineKey。
任何想法?
它们使用相同的域字符串,并且它们也具有相同的machineKey元素。然而,域名字符串与“domain.com”类似,而网站访问的网址类似于“sub1.sub2.domain.com”。只要字符串在父类和子类web.configs中匹配,这是否会有所作为? – SamiHuutoniemi
不,如果您的网站托管在“sub1.domain.com”和“sub2.domain.com”上,您应该将域属性设置为“domain =”domain.com“'。如果您不使用任何ASP.NET会话,这应该工作。这只是共享表单身份验证Cookie,而不是会话。如果你依赖某个会话,它将无法工作,因为会话默认存储在应用程序的内存中。如果您希望能够在应用程序之间共享会话,则必须使用共享会话提供程序(例如SQL Server)。 –
是的。我们只是分享表单身份验证Cookie。所以这应该工作。但是,它没有。我可以看到,Cookie是在Chrome中创建的,但不知道为什么子项目无法解密它。 – SamiHuutoniemi