经过一段时间的搜索和阅读文档,我决定问问你们。
所以,场景很“简单”:
用户转到 https://Domain1.com ,输入他的凭据,尝试登录。
登录成功后,根据用户类型和DB的其他信息, Domain1 服务器应将用户重定向到另一个位于 https://Domain2.com 的 CF 服务器.
到目前为止,没问题,使用 HTTP 301 和 cfheader/cflocation 我正在将用户重定向到第二台机器,但他必须重复登录过程,这是我们管理层无法接受的。
是否有用于将客户端连同 session 数据一起“传输”到另一台机器或至少自动使用相同凭据让他登录的良好且安全的做法?
你会怎么做?
最佳答案
您可能有很多方法可以处理这个问题。以下是一些可能的选项。
处理此问题的“企业”方法是使用某种单点登录 (SSO) 实现,例如 Shibboleth,来处理它。这很复杂,但非常有效和安全。
在重定向用户之前,您可以生成一个存储在某处(服务器范围、数据库)的 token ,指示用户已登录。然后,当您重定向该用户时,发送该 token (http://domain2.com/HGF394JFJk58fjJ)。当第二台服务器收到请求时,如果发现 token 存在,它可以将远程请求 (cfhttp) 发送回第一台服务器,以查明该 token 是否有效。如果是,只需将用户登录到第二个站点。当然,您必须做一些事情来确保 token 不能被重用/重放。
在用户登录站点 1 后,您可以向站点 2 发送远程请求 (cfhttp) 以让用户登录。然后显示一个页面(来自站点 1),其中包含从站点 2 加载到的 iframe为站点 2 设置 session cookie。这不是很干净,并且要求您在重定向到站点 2 之前至少显示站点 1 的一个页面。我真的不喜欢这个选项,并且怀疑它容易出错且脆弱。
正如我所说,可能还有其他选择。有些甚至可能更好(尽管我怀疑比选项 1 更好)。如果您有可用的资源,我会选择选项 1。
关于http - 登录后重定向和 session 数据传输到另一个服务器/域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244285/