【问题标题】:Is this authentication flow secure?此身份验证流程安全吗?
【发布时间】:2021-02-22 13:37:49
【问题描述】:

目标

在可以使用第一方身份验证(OIDC、keycloak)的第 3 方网站上嵌入表单,以发布到通过不记名令牌保护的第 1 方服务。 (想想类似的评论形式 à la disqus。)

此流程不允许刷新 oidc 不记名令牌是可以接受的。

担忧

  1. 防止点击劫持

  2. 控制允许使用表单的第 3 方网站

  3. 将用户信息和令牌与第三方网站隔离

方法

我目前的理解使我相信这些问题已经得到解决:

  1. 为防止点击劫持(如在 iframe 嵌入的身份验证中),整个登录过程在一个新的弹出窗口中执行(参见图片:打开弹出窗口)。

  2. 检查 window.opener 并根据 pass-list 检查 window.opener(参见图片:登录登陆)应确保登录登陆没有嵌入到 iframe 中,没有直接导航到,并且只能在从授权网站弹出。 检查 window.postmessage 命令的 targetOrigin 应该确保只有授权的网站才能成功使用表单。

  3. 让 Web 组件(参见图片:第一方 Web 组件)使用来自 srcDoc 的内部沙盒 iframe 来执行所有用户信息或令牌相关的操作,这应该会屏蔽用户信息和令牌,使其不被第 3 方网站访问。使用内部 iframe 还应确保使用 Web 组件的第 3 方网站无法拦截 postmessage 事件。

问题

  1. 这种方法安全吗?

  2. 我不知道有没有更标准化的方法来解决这个问题?

感谢您的意见!

【问题讨论】:

标签: iframe keycloak openid-connect web-component


【解决方案1】:

好的,你每天都会学到新东西。

我了解到,问题中显示的我遵循的方法不安全

  • 通过 srcdoc 填充的 iframe 显然不能算作跨域框架。嗯,嗯。这意味着它对第 3 方网站没有可行的保护措施。通过在其上添加沙盒属性并没有得到任何改善,因为这旨在提供另一个方向的保护(保护 3rd 方网站免受 iframe 内容的影响)。

  • 使用包含跨域 iframe 的 Web 组件可能可行。但是,为什么要麻烦嵌入第 3 方网站,包括 a)脚本和 b)Web 组件标签?与简单地使用跨域 iframe 相比,我看不出有什么真正的好处(在我的用例中)。

  • 在对方点击劫持的弹出补救措施是必须的。

本问答由“在制定详细计划之前首先尝试了解您的工具”委员会赞助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2015-09-02
    相关资源
    最近更新 更多