STS 身份验证 - MVC 站点



我有两台服务器: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)正在使用官方(解冻)证书,并且是我们的防火墙。 此证书的公用名与服务器名称不匹配(因此可以在我们的服务器场中共享)。 因此,当我们访问该网站时,我们使用 https://[commonname].com/web而不是 https://[servername]/web。 我尝试了后一种方法(我收到名称不匹配的证书错误),但仍然有相同的结果。

另外,我可以直接访问STS站点并在那里登录。

默认情况下

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代表安全令牌服务。我的回答无关紧要。:(

STS服务器重定向时,您必须使用AutoPost表单重定向,该表单会将token提交给Relying party

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

因此,下次您将在信赖方检查User.Identity.IsAuthenticated时,它将返回True

点击以下链接了解更多信息,

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

将 RP 移动到其他服务器时,我们遇到了同样的问题。 事实证明,我们需要进入应用程序池 ->高级设置 ->设置"加载用户配置文件"= true。

之后,一切都在新服务器上正常工作,User.Identity.IsAuthentication在从STS返回后返回"true"。

最新更新