php - 在保持“登录”状态的同时安全地将用户转移到不同 URL 的最佳方法
问题描述
在我们最新版本的 SAAS 产品中,我们将其设计为允许我们的客户部署该软件的多个实例。
我们要求注册和登录紧密集成到主域中——“向新客户销售产品”网站 PrimaryDomain.com,该网站具有使用 jQuery/AJAX 提供响应反馈的“注册”和“登录”表单数据提交。
当客户成功登录后,他们将看到所有已安装的我们产品实例的列表。我们产品的所有已安装实例都可以托管在数十个域中,但为了简单起见,它们托管在 [subdomain].SecondaryDomain.com(代码 + 数据库)上。
每个已安装的实例还具有一个管理面板,当前客户需要根据需要手动登录到每个单独的实例。
我们希望客户能够点击任何已安装实例旁边的“查看管理面板”并自动登录[subdomain].SecondaryDomain,因为他们已登录PrimaryDomain.com。
SecondaryDomain.com自然无法访问PrimaryDomain.com的 cookie 或会话变量,那么允许SecondaryDomain.com授权的最佳方式是什么?
我们考虑了一些不同的选择,例如;
正在研究域可以共享 cookie/会话数据的一些巧妙方法?
单击“查看管理面板”到第二个域时,生成与 url 一起传递的令牌。令牌对用户 ID 加上子域(例如 md5 哈希)是唯一的,然后在接收端对其进行验证。
将一次性令牌记录到数据库中并使用 url 发送,并让SecondaryDomain.com连接到PrimaryDomain.com 的数据库以验证一次性令牌并设置适当的会话和 cookie 变量。
一次性使用令牌似乎是正确的方法,但我无法找到任何具体答案(a)如果这甚至是正确的方法,以及(b)它周围的安全隐患是什么?
解决方案
对于这种情况,我推荐 SAML。SAML 要求您拥有身份提供者 (IdP) 和服务提供者 (SP)。用户将登录到 IdP 并将令牌呈现给访问的任何 SP。SP 需要配置为针对 IdP 声明令牌。您可能想查看 Auth0 的 SAML SSO 产品以了解更多信息,但还有其他提供者可以做同样的事情。
推荐阅读
- excel - 带有标准的 DAX LASTDATE 公式
- python - 在python中使用opencv库对图像进行阈值处理,使用for循环具有不同的标志
- reactjs - useGetOne 响应不会重新呈现组件
- python - 为什么我的 python 程序总是告诉我我的答案不正确,即使答案是错误的?
- javascript - 为什么下拉选择选项在某些移动设备中不起作用
- lua - 为什么lua string.find返回错误的数字
- delphi - 如何正确使用 TTask 和 IXMLHttpRequest?
- ssl - ftplib.error_perm: 550 使用 FTP_TLS 时创建目录操作失败
- python - 检查是否抛出异常并且不退出脚本的解决方案
- oracle - 创建一个过程以将一些记录从一个表复制到另一个