【问题标题】:Authenticate user before displaying an iFrame在显示 iFrame 之前验证用户
【发布时间】:2015-07-06 16:51:06
【问题描述】:

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

我有一个此服务的付费帐户。在处理 iFrame 之前,是否有任何 rails gem 可以登录服务?

或者我的 rails 应用程序中的代理会是更好的选择吗?

任何指针表示赞赏!

【问题讨论】:

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


    【解决方案1】:

    Rails gems 和你的 rails 中的代理都不起作用,它们同样有相同的限制。

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

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

    除非您的意思是代理整个事物、身份验证请求以及所有后续请求以及与此仪表板的用户交互。这应该可以,但是(见下文)

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

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

    另外 - 不可能进行身份验证服务器端并捕获 cookie,然后让用户直接使用浏览器浏览网站,原因有两个:

    1. 有时身份验证 cookie 使用有关浏览器或 HTTP 客户端的信息来加密 cookie,因此从不同的客户端发送相同的 cookie 将不起作用
    2. 您不能告诉浏览器将 cookie 发送到与您自己不同的域。

    所以你的选择是,我现在想不到:

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

    好的,我没有想法。 :)

    【讨论】:

    • 非常感谢所有的想法!
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多