要在 OAuth 中获取令牌,需要与身份验证提供者来回进行此操作。站点和 Web 应用程序之间的屏幕闪烁也会在此过程中丢失内部状态。另外,它可能会让用户感到不舒服和困惑。
我创建了一个使用隐藏 iFrame 的解决方案,它可以获取令牌并通知父站点。用户看不到任何闪烁,应用程序也保持状态。
您是否发现这种方法存在任何问题以及安全问题(如果有)?
允许 OAuth 2.0 流在 iframe 中发生,您很容易受到所谓的点击劫持攻击,请参阅:https://datatracker.ietf.org/doc/html/rfc6819#section-4.4.1.9
4.4.1.9。威胁:针对授权的点击劫持攻击
通过点击劫持,恶意网站会在
中加载目标网站 透明 iFrame(参见 [iFrame])覆盖在一组虚拟的顶部
精心构造的按钮直接放置在下面
目标站点上的重要按钮。当用户单击可见的
按钮,他们实际上是在点击一个按钮(例如“授权”
按钮)在隐藏页面上。影响:攻击者可以窃取用户的身份验证凭据 并访问他们的资源。
对策:
o 对于较新的浏览器,在授权期间避免使用 iFrame 能 通过使用 X-FRAME-OPTIONS 标头在服务器端强制执行 (第 5.2.2.6 节)。
o 对于较旧的浏览器,JavaScript 框架破坏(请参阅 [帧破坏]) 可以使用这些技术,但可能并非在所有浏览器中都有效。
示例请参见:https://melmanm.github.io/misc/2023/10/01/article10-oauth-clickjacking.html.