【发布时间】:2021-02-22 13:37:49
【问题描述】:
目标
在可以使用第一方身份验证(OIDC、keycloak)的第 3 方网站上嵌入表单,以发布到通过不记名令牌保护的第 1 方服务。 (想想类似的评论形式 à la disqus。)
此流程不允许刷新 oidc 不记名令牌是可以接受的。
担忧
-
防止点击劫持
-
控制允许使用表单的第 3 方网站
-
将用户信息和令牌与第三方网站隔离
方法
我目前的理解使我相信这些问题已经得到解决:
-
为防止点击劫持(如在 iframe 嵌入的身份验证中),整个登录过程在一个新的弹出窗口中执行(参见图片:打开弹出窗口)。
-
检查 window.opener 并根据 pass-list 检查 window.opener(参见图片:登录登陆)应确保登录登陆没有嵌入到 iframe 中,没有直接导航到,并且只能在从授权网站弹出。 检查 window.postmessage 命令的 targetOrigin 应该确保只有授权的网站才能成功使用表单。
-
让 Web 组件(参见图片:第一方 Web 组件)使用来自 srcDoc 的内部沙盒 iframe 来执行所有用户信息或令牌相关的操作,这应该会屏蔽用户信息和令牌,使其不被第 3 方网站访问。使用内部 iframe 还应确保使用 Web 组件的第 3 方网站无法拦截 postmessage 事件。
问题
-
这种方法安全吗?
-
我不知道有没有更标准化的方法来解决这个问题?
感谢您的意见!
【问题讨论】:
-
一种选择是在后端完成所有操作,并且永远不要直接在浏览器中使用令牌,请参阅leastprivilege.com/2020/03/31/spas-are-dead 和 leastprivilege.com/2019/01/18/…
标签: iframe keycloak openid-connect web-component