2013-03-24 202 views
4

我想从根应用程序共享表单身份验证到在虚拟目录中运行的子应用程序。我在子网站中遇到了身份验证问题。跨虚拟目录的表单身份验证

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

我有以下设置:

父应用:

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

虚拟目录:

  • URLhttp://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我得到以下流程:

  • GEThttp://localhost:1336/subsite - > 302 /帐号/点登录in?ReturnUrl =%2fsubsite (看起来不错)
  • Ent呃用户/密码,
  • POSThttp://localhost:1336/account/sign-in?ReturnUrl=%2fsubsite - > 302 /子网站(伟大的权威性看起来像它的成功)
  • GEThttp://localhost:1336/subsite? - > 302 /帐号/登入RETURNURL =% 2fsubsite (即子网站犯规认为其已认证)

而且我可以看到在列表中的Cookie在我的浏览器(其实际上存在)

我的配置中有什么问题阻止了我的子网站共享父级cookie?

我对IISExpress

+2

都设置在web.config中常见的machineKey? – 2013-03-24 20:18:06

+0

@davea我的理解是,只有当这些站点位于不同的物理机器上时,才需要这样做。这些都在我的开发箱上。这不是这种情况吗? – 2013-03-24 20:22:25

+0

我不认为这是真的。我正在研究一个相反的项目。 1个主机,主要和子域(管理员和客户端),我们不尊重签名以保持划分。我们不必配置此行为。这是默认的。 Ergo,我认为从同一台机器托管没有什么区别。 – 2013-03-24 20:27:18

回答

6

运行这个在你的web.config文件,设置的项目,使2个域共享验证和解密密钥之间的共同机键。

例如:

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

谢谢,只是作为一个FYI我用'的validationKey =“自动生成” decryptionKey =“自动生成”'以避免需要生成密钥自己。这似乎是在同一台机器上很好地工作(但我认为在不同的机器时,可能会失败), – 2013-03-24 20:56:33

+0

@LukeMcGregor一致认为应该提到。我要回来这个和清理我的答案时,我有时间。 – 2013-03-24 20:59:04