我有两台服务器:STS和Web。在STS服务器上,我打电话给:
FormsService.SignIn(model.UserName, false);
下一行,我查一下:
User.Identity.IsAuthenticated
这是设置为TRUE。然后我重定向回我的Web服务器,在我点击的控制器中,我检查:
User.Identity.IsAuthenticated
这设置为FALSE。
What could cause this?
更新:我也尝试将STS网站移到Web服务器上。我得到了同样的错误/问题
更新:我忘了提到我们的DEV服务器运行正常。其配置完全相同(服务器名称和证书指纹除外)。这两个服务器之间唯一不同的是,一个(DEV)使用自签名证书并且在我们的防火墙内。另一个(QA)正在使用官方(thawte)证书,并且是我们的防火墙。此证书的通用名称与服务器名称不匹配(因此可以在我们的服务器场中共享)。因此,当我们访问网站时,我们使用https:// [commonname] .com / web而不是https:// [servername] / web。我尝试了后一种方法(我得到名称不匹配的证书错误)但仍然有相同的结果。
此外,我可以直接访问STS网站并在那里登录。
答案 0 :(得分:0)
ASP.NET身份验证默认基于cookie。 Cookie存在于Web域内。 所以,如果您安装了两个这样的服务器:
WEB服务器无法读取STS设置的cookie
有两种可能的解决方案:
选项1 按如下方式移动服务器:
更新web.config以将Cookie范围扩展到yourdomain.com:
<authentication mode="Forms">
<forms domain=".yourdomain.com"/>
</authentication>
要在网址中存储故障单,请查看此文章 - http://www.codeproject.com/Articles/2796/Cookieless-ASP-NET-forms-authentication
更新:似乎我没有得到STS代表安全令牌服务。我的回答是不相关的。 :(强>
答案 1 :(得分:0)
从STS
服务器重定向时,您必须使用AutoPost
表单进行重定向,该表单会将token
提交至Relying party
。
当Relying party
收到令牌时,它会针对该用户创建cookie。
因此,下次您将在依赖方检查User.Identity.IsAuthenticated
时,它会返回True
。
通过以下链接了解更多信息,
答案 2 :(得分:0)
将RP移动到其他服务器时,我们遇到了同样的问题。事实证明,我们需要进入应用程序池 - &gt;高级设置 - &gt;设置'加载用户配置文件'=真。
之后,一切都在新服务器上运行,User.Identity.IsAuthenticated从STS返回后返回'true'。