【问题标题】:How to protect the token in the client when using OpenId Connect Implicit Flow使用 OpenId Connect 隐式流时如何保护客户端中的令牌
【发布时间】:2018-04-05 02:18:28
【问题描述】:

使用 OpenID Connect 隐式流,授权服务器在成功认证后重定向回客户端。 location 标头将包含令牌作为 url 片段 (#id_token=xyz)。

这可以防止令牌从用户代理通过引用或类似方式泄漏到包含的资源。

但是,如果 javascript 文件等第三方资源包含在重定向目标页面中,则这些脚本将通过文档位置访问令牌。

在包含第 3 方资源时,保护客户端令牌的最佳做法是什么?例如。您通常会实现一个“受限”重定向目标,在再次重定向之前将 url 片段交换为 cookie?

更新

更清楚一点:根据@janhalasa 的回答,攻击场景不包含不受信任的 javascript。攻击线是更不经意的令牌泄漏,例如将文档 uri 传输到外部服务器(谷歌分析?)的图书馆。通过将哈希片段移动到会话存储中,它不会被意外泄露。

【问题讨论】:

    标签: google-analytics identityserver3 openid-connect


    【解决方案1】:

    如果您不信任正在使用的外部库,最好停止使用它们。无论您使用 JavaScript 代码在何处隐藏 ID 令牌(cookie、sessionStorage、localStorage),库都将能够找到它,因为您的代码和库代码都在相同的运行时环境中运行。

    我认为通常的做法是将令牌保留在sessionStorage 中,并且仅将其附加到需要它的请求中。 sessionStorage 的优点是能够在重新加载/重定向后幸存下来,并且只能由您的应用程序的文档访问。

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2016-12-18
      • 2015-07-25
      • 1970-01-01
      • 2017-12-02
      • 2014-08-30
      • 1970-01-01
      • 2021-10-28
      • 2017-11-13
      相关资源
      最近更新 更多