1

我们有两个独立的 MVC 4 Web 应用程序,它们作为同一网站的一部分运行。主(父)项目具有身份验证,并且工作正常。现在我们已经将第二个项目添加到同一个站点(一个在子框架中运行的页面),我们无法弄清楚如何使它使用用户通过父应用程序获得的授权。

两者都在 web.config 中使用相同的表单元素:

<forms loginUrl="~/Account/LogOn" name=".ASPXFORMSAUTH"  domain="..." protection="All" timeout="2880"/>

在子项目中我需要的不仅仅是 [Authorize]-tag 吗?

[Authorize]
public class HomeController : Controller
{
    ...

    public ActionResult Index()
    {

        return View();
    }

    ...
}

可能不用说,如果我尝试访问子项目的 HomeController,即使用户在父项目中登录,页面也会被重定向到登录页面。

两个项目使用相同的 machineKey。

有任何想法吗?

4

1 回答 1

2

确保域属性设置为父域:

<forms 
    loginUrl="~/Account/LogOn" 
    name=".ASPXFORMSAUTH"  
    domain="domain.com" 
    protection="All" 
    timeout="2880"
/>

还要确保您为两个应用程序设置了相同的机器密钥:

<machineKey validationKey="5C1E392DB9867A990FE0161B8BD07C1B165921DDAB21ADCC4C8F15D67EA2DECD7AEBB04409A411C69CB125EDEA3702B64DF17D47AD951461F444175BDF0277CF" decryptionKey="43CC900E97D496FC6C5C0C12FE005F9E846675C4BD45977BA5CEE852741ED3B6" validation="SHA1" decryption="AES" />

这将确保由第一个应用程序加密的表单身份验证 cookie 可以被第二个应用程序解密。您可以使用以下网站生成强大的机器密钥。

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

于 2013-06-03T12:06:19.087 回答