Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 在负载平衡环境中,Fed auth cookie解密失败_Asp.net Mvc 4_Cookies_Forms Authentication_Wif - Fatal编程技术网

Asp.net mvc 4 在负载平衡环境中,Fed auth cookie解密失败

Asp.net mvc 4 在负载平衡环境中,Fed auth cookie解密失败,asp.net-mvc-4,cookies,forms-authentication,wif,Asp.net Mvc 4,Cookies,Forms Authentication,Wif,我在负载平衡器后面有两台web服务器。我在另一个VM中有一个单独的STS(带WIF的安全令牌服务应用程序)应用程序 当用户尝试登录时,用户在web应用程序的登录页面中输入Organization,这将把用户重定向到STS应用程序(此处发生家庭领域发现)以输入用户名和密码。STS在登录过程中与ADFS服务器通信。一旦用户从STS应用程序单击登录,安全令牌将被创建并重定向到web应用程序,该web应用程序将创建表单身份验证cookie并重定向到主页 这个很好用。当用户浏览到网站中的不同页面时,用户会

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

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

这个很好用。当用户浏览到网站中的不同页面时,用户会突然注销。当负载平衡器重定向到另一台服务器时会发生这种情况(如果我在服务器A上登录,只要请求指向服务器A就可以了。但是,一旦负载平衡器将我的请求定向到服务器B,我就会注销)

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

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

这里发生了什么?是不是“FedAuth Cookie”无法被最初由web服务器创建的服务器解密?请帮忙

登录后的Cookies,

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


应用程序托管在Azure环境中

我的猜测是,eloadbalancer后面的两台服务器应该使用相同的machinekey。这用于会话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" />


Fed auth cookie存储名称/角色和电子邮件。您能告诉我在哪里添加此配置吗?它是否在microsoft.IdentityModel块中?microsoft.IdentityModel是旧的部分,在.Net 4.5中已被替换为。。。 ... 我正在项目中使用microsoft.identitymodel。microsoft.identitymodel是否有类似的设置?