使用OpenID Connect隐式流,授权服务器在成功验证后重定向回客户端。 location
标头将包含令牌作为url片段(#id_token=xyz
)。
这可以防止令牌通过引用者或类似方式从用户代理泄漏到包含的资源。
但是,如果重定向目标页面中包含第三方资源(如javascript文件),则这些脚本将通过文档位置访问该令牌。
在包含第三方资源时,在客户端保护令牌的最佳做法是什么?例如。您是否通常会在重定向之前实现一个“限制”重定向目标,以便为cookie交换url片段?
更新
更清楚一点:根据@janhalasa的回答,攻击场景不包含不受信任的javascripts。攻击线更令人意外地泄漏令牌,例如将文件uri传输到外部服务器的图书馆(谷歌分析?)。通过将哈希片段移动到会话存储,它不会被意外泄露。
答案 0 :(得分:1)
如果您不信任您正在使用的外部库,可能最好停止使用它们。无论您使用JavaScript代码隐藏ID令牌(cookie,sessionStorage,localStorage),库都能够找到它,因为您的代码和库代码都在相同的运行时环境中运行。
我认为通常的做法是将令牌保留在sessionStorage
中,并且只将其附加到需要它的请求中。 sessionStorage
的优点是能够在重新加载/重定向后继续存在,并且只能通过应用程序的文档访问。