0

我有两台服务器: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 站点并在那里登录。

4

3 回答 3

0

从您的STS服务器重定向时,您必须使用AutoPost将提交tokenRelying party.

何时Relying party收到令牌,它将针对该用户创建 cookie。

因此,下次您User.Identity.IsAuthenticated在 Relying 聚会检查时,它会返回给您True

通过以下链接了解更多信息,

http://chris.59north.com/post/2013/03/27/Claims-based-identities-in-ASPNET-MVC-45-using-the-standard-ASPNET-providers.aspx

于 2013-08-04T07:51:07.607 回答
0

默认情况下,ASP.NET 身份验证基于 cookie。Cookie 存在于网络域中。因此,如果您像这样安装了两台服务器:

  1. http://www.web.com
  2. http://www.sts.com

WEB服务器无法读取STS设置的cookie

有两种可能的解决方案:

  1. 将两台服务器都实现为子域
  2. 将身份验证票证存储在 URL 而不是 cookie 中

对于选项 1 移动服务器,如下所示:

  1. http://www.web.yourdomain.com
  2. http://www.sts.yourdomain.com

更新 web.config 以将 cookie 限定为 yourdomain.com:

<authentication mode="Forms">
      <forms domain=".yourdomain.com"/>
</authentication>

要在 url 中存储票证,请查看这篇文章 - http://www.codeproject.com/Articles/2796/Cookieless-ASP-NET-forms-authentication

更新:似乎我没有得到 STS 代表安全令牌服务。我的回答不相关。:(

于 2012-06-09T18:55:05.177 回答
0

将 RP 移动到另一台服务器时,我们遇到了同样的问题。事实证明,我们需要进入应用程序池 -> 高级设置 -> 设置 'Load User Profile' = true。

之后,一切都在新服务器上正常运行,并且 User.Identity.IsAuthenticated 在从 STS 返回后返回“true”。

于 2013-08-09T18:28:44.550 回答