在显示iFrame之前对用户进行身份验证

时间:2015-04-28 02:24:43

标签: ruby-on-rails ruby iframe proxy embed

我正准备开展一个项目,我需要从在线应用程序中显示一个仪表板。不幸的是,目前无法使用API​​。仪表板可以嵌入iFrame中。但是,当它显示时,它将提示用户查看仪表板以登录帐户。

我有一个付费帐户到这项服务。在处理iFrame之前,是否有任何rails gems登录服务?

或者我的rails应用程序中的代理是否会成为更好的路径?

任何指针都表示赞赏!

1 个答案:

答案 0 :(得分:2)

Rails gems和rails中的代理都不会起作用,并且它们也有相同的限制。

它们都在服务器端的后端运行。

您需要的身份验证是客户端。

除非您的意思是代理ENTIRE事件,auth请求以及此仪表板的所有后续请求和用户交互。这应该有效,但(见下文)

身份验证的工作方式(非常普遍)是:一旦您登录到任何系统,它就会在您的浏览器上存储一个cookie,然后浏览器会为每个后续请求发送该cookie。

如果您在后端进行身份验证,该cookie将被发送到您的rails代码并将在那里死亡,用户浏览器将永远不会知道它。

此外 - 无法执行auth服务器端并捕获cookie,然后让用户直接使用浏览器浏览网站,原因有两个:

  1. 有时,auth cookie使用有关浏览器或HTTP客户端的信息来加密cookie,因此从其他客户端发送相同的cookie无法正常工作
  2. 您无法告诉浏览器将cookie发送到与您自己的域不同的域。
  3. 所以你的选择现在是我的头顶:

    1. 如果有一个登录页面接受来自其他域的表单提交,您可以尝试直接模拟表单提交到该站点"登录后#34;页。 (用户填写登录表单后指向的页面)。任何现代Web框架都可以作为XSRF保护(跨站点请求伪造保护),并且出于安全原因将禁止使用此方法。
    2. 查看此站点使用的身份验证是否具有您可以执行的任何类型的OAUTH,单点登录(SSO)或类似类型的身份验证集成。 (类似于API,因此您可能已经探索过此选项)
    3. 通过您的服务器代理对此站点的所有请求。您必须重写整个HTML,以便所有图像,CSS,样式表和所有其他资源也通过代理进行路由,否则URL将在HTML中重写为不相对。如果某个网站没有针对此用例进行设计,您可能会碰到各种墙壁。对于像您不代理的资产使用相对网址的网站,网站引用非相对网址会导致跨域错误等。请注意,它很难重写每一个最后一个资产参考,它不仅是你担心的HTML,Javascript也可以包含URL,CSS也可以。
    4. 您可以编写将用户登录到网站的书签或浏览器扩展程序。
    5. 让每个人都安装Lastpass
    6. 让每个人都安装TamperMonkey浏览器扩展程序(以及其他浏览器的其他浏览器),并编写一个小的用户脚本以自动运行自定义JavaScript以在该网站上登录用户
    7. 抓取该网站以获取您需要的信息并在您自己的网站上提供。
    8. 好的,我没有想法。 :)