表单跨虚拟目录的身份验证

时间:2013-03-24 19:58:46

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

我正在尝试将表单auth从根应用程序共享到在虚拟目录中运行的子应用程序。我在子网站上进行身份验证时遇到了问题。

在父应用程序中,一切都按预期工作。

我有以下设置:

家长申请:

  • 网址http://localhost:1336/
  • <forms loginUrl="~/account/sign-in" protection="All" timeout="30" name=".MYAPPLICATION" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" enableCrossAppRedirects="true" defaultUrl="/" />

虚拟目录:

  • 网址http://localhost:1336/subsite
  • <forms loginUrl="/account/sign-in" protection="All" timeout="30" name=".MYAPPLICATION" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" enableCrossAppRedirects="true" defaultUrl="/" />

当我尝试http://localhost:1336/subsite时,我得到以下流程:

  • GET http://localhost:1336/subsite - &gt; 302到/ account / sign-in?ReturnUrl =%2fsubsite (看起来不错)
  • 输入用户/密码
  • 发布http://localhost:1336/account/sign-in?ReturnUrl=%2fsubsite - &gt; 302 / subsite (很棒的auth看起来很成功)
  • GET http://localhost:1336/subsite - &gt; 302到/ account / sign-in?ReturnUrl =%2fsubsite (IE子网站不认为其经过身份验证)

此外,我可以在浏览器的列表中看到cookie(所以它实际上在那里)

我的配置中出现了什么问题导致我的子网站停止共享父cookie?

我在IISExpress上运行它

1 个答案:

答案 0 :(得分:6)

在您的web.config文件中,在项目之间设置公共计算机密钥,以便2个域共享验证和解密密钥。

示例:

<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7" 
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>