【问题标题】:Fed auth cookie decrypt fails in load balanced environmentFed auth cookie 解密在负载平衡环境中失败
【发布时间】:2015-09-27 18:38:34
【问题描述】:

我在负载平衡器后面有 2 个 Web 服务器。我在不同的 VM 中有一个单独的 STS(带有 WIF 的安全令牌服务应用程序)应用程序。

当用户尝试登录时,用户在 Web 应用程序的登录页面中输入组织,这会将用户(此处发生家庭领域发现)重定向到 STS 应用程序以输入用户名和密码。 STS 在登录过程中与 ADFS 服务器通信。一旦用户从 STS 应用程序单击登录,就会创建安全令牌并将其重定向到创建表单身份验证 cookie 并重定向到主页的 Web 应用程序。

这工作得很好。当用户导航到网站中的不同页面时,用户突然退出。当负载均衡器重定向到另一台服务器时会发生这种情况(如果我的登录发生在服务器 A 上,并且只要请求指向服务器 A 就可以了。但是一旦我的请求被负载均衡器定向到服务器 B,我退出)。

当我在非 STS 模式下运行应用程序(仅使用表单身份验证)时,它在上述场景中运行良好(当负载均衡器向两台服务器发送请求时用户不会注销)。两个 Web 服务器都具有相同的 asp.net MVC Web 应用程序副本,具有相同的机器密钥等。

所以这应该是一个与 STS 相关的问题。表单身份验证 cookie 存储“用户 ID”,一个 guid,以加载会话变量。根据应用程序日志,一旦请求被发送到不是用于登录的服务器的服务器,它就无法从 cookie 中识别用户 ID(如 guid 为空)。我是 STS 域的新手。这里我分享一下开发工具中显示的 cookie 详细信息。

这里发生了什么?是“FedAuth cookie”无法被最初创建的 Web 服务器的服务器解密吗?请帮忙!!!

登录后的cookies,

从 STS 应用程序重定向到登录 Web 应用程序时的 Cookie,

应用程序托管在 Azure 环境中

【问题讨论】:

  • Fed auth cookie 存储姓名/角色和电子邮件。

标签: asp.net-mvc-4 cookies forms-authentication wif


【解决方案1】:

我的猜测是,eloadbalancer 后面的两个服务器应该使用相同的机器密钥。这用于会话 cookie。 这可以通过更改设置密钥和更改会话安全令牌处理程序来完成:

            <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

【讨论】:

  • 你能告诉我在哪里添加这个配置吗?它在 microsoft.IdentityModel 块内吗?
  • Microsoft.IdentityModel 是旧部分,在 .Net 4.5 中已被 ... ...
  • 我在项目中使用 microsoft.identitymodel。 microsoft.identitymodel 有类似的设置吗?
猜你喜欢
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2010-10-23
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多