与Web服务器集群的身份验证

6

给定一个网络应用程序的想法(.NET 3.5+)

  • 浏览器
  • 网络应用程序

使用表单进行身份验证将导致类似的代码行:

FormsAuthentication.SetAuthCookie(strUsrNm, True)

这在非负载平衡服务器实例中很好。但是在负载平衡情况下(没有粘性会话/无限制),并且您不能在浏览器中存储客户端IP、用户密码或登录信息时,身份验证如何工作?

  • 浏览器
  • 负载均衡器
  • Web应用程序(在服务器1上)|| Web应用程序(在服务器2上)

限制:无数据库会话,无AD服务器(例如:为外部用户提供服务)

简而言之,在负载平衡情况下,如果用户已经在其他服务器上通过身份验证,那么应用程序如何知道该用户是谁,而无需重新进行身份验证。

谢谢

1个回答

18
如果您使用 Cookies,所有服务器都会知道已认证的用户,因为身份验证票据存储在 Cookie 上。任何服务器将接收此 Cookie 并能够解密票据并对用户进行身份验证。 这里有更多关于表单身份验证如何工作的详细信息。
同时,您必须确保农场中的所有服务器共享用于加密和解密的机器密钥。
如果您在 Web farm 中部署应用程序,则必须确保每个服务器上的配置文件共享 validationKey 和 decryptionKey 的相同值,这些值分别用于哈希和解密。这是必需的,因为您无法保证哪个服务器将处理连续的请求。
对于手动生成的密钥值,设置应类似于以下示例:
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7 AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B" decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F" validation="SHA1" decryption="AES" />
这里有更多细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接