我们有两个独立的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。
有什么想法吗?
答案 0 :(得分:2)
确保将domain属性设置为父域:
<forms
loginUrl="~/Account/LogOn"
name=".ASPXFORMSAUTH"
domain="domain.com"
protection="All"
timeout="2880"
/>
还要确保为两个应用程序设置了相同的机器密钥:
<machineKey validationKey="5C1E392DB9867A990FE0161B8BD07C1B165921DDAB21ADCC4C8F15D67EA2DECD7AEBB04409A411C69CB125EDEA3702B64DF17D47AD951461F444175BDF0277CF" decryptionKey="43CC900E97D496FC6C5C0C12FE005F9E846675C4BD45977BA5CEE852741ED3B6" validation="SHA1" decryption="AES" />
这将确保第一个应用程序加密的表单身份验证cookie可以被第二个应用程序解密。您可以使用以下网站生成强大的机器密钥。
(已删除链接。不再有效)