使用隐式流时重放攻击

时间:2019-06-03 21:03:37

标签: javascript jwt access-token oidc implicit-flow

我有一个使用隐式流程授权用户的React App。

流程如下: 1.如果sessionStorage中没有保存访问令牌或用户信息-用户将被重定向到登录页面。 2.用户登录并重定向到React App的主页。 2.1。重定向回首页时,重定向URL已经具有access_token和id_token作为url参数的一部分。 3. React App保存访问令牌并解码id_token以获取有关用户的信息。

现在的问题是,如果有人窃取了2.1中的重定向URL。他们可以将其粘贴到浏览器中,然后基本上重播此登录名。

解决方案之一是实现随机数。

was removed in 4.0 and higher versions

根据以上文章,随机数应存储在localStorage中,一旦我获得ID_token的随机数,我应使用localStorage中的原始随机数对其进行验证。但是攻击者可以执行以下操作: 1.取这个id_token。 2.使用任何在线工具对其进行解码。 3.检查其中包含哪种随机数。 4.使用Chrome开发工具,使用所需的随机数修改历史记录localStorage。

有人知道防止这种攻击的更好主意吗?

1 个答案:

答案 0 :(得分:1)

问题是真实的。通过在运行时在身份服务器和应用程序级别之间进行严格的重定向URI验证,可以解决此特定问题,但是还有更多问题。 auth0的这篇博客文章对此进行了解释。 https://auth0.com/blog/oauth2-implicit-grant-and-spa/#The-Implicit-Grant

oauth2.0工作组已发布了最新的最佳实践,建议使用授权码流+ PKCE代替隐式授予流。 https://tools.ietf.org/html/draft-ietf-oauth-security-topics-11