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

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

我有以下设置:

家长申请:

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

  • 虚拟目录:
  • URL : 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 for http://localhost:1336/subsite -> 302 to/account/sign-in?ReturnUrl=%2fsubsite (looks ok)
  • 输入用户/密码
  • POST http://localhost:1336/account/sign-in?ReturnUrl=%2fsubsite -> 302/subsite(很棒的 auth 看起来像它成功了)
  • GET for http://localhost:1336/subsite -> 302 to/account/sign-in?ReturnUrl=%2fsubsite(即子站点认为其未通过身份验证)

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

    我的配置有什么问题导致我的子站点无法共享父 cookie?

    我在 IISExpress 上运行这个

    最佳答案

    在您的 web.config 文件中,在项目之间设置一个公共(public)机器 key ,以便 2 个域共享验证和解密 key 。

    例子:

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

    关于asp.net - 跨虚拟目录的表单例份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15603289/

    10-11 17:29