在父和子Web应用程序之间共享身份验

时间:2013-06-03 09:43:38

标签: asp.net-mvc-4 forms-authentication

我们有两个独立的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。

有什么想法吗?

1 个答案:

答案 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可以被第二个应用程序解密。您可以使用以下网站生成强大的机器密钥。

(已删除链接。不再有效)