2016-05-12 136 views
5

我正在浏览Oauth2文档,并认为这是一种宽容的安全方式,因此我试图通过特殊的方案来实现JWT令牌,如图片中用于与Web API进行通信的移动应用程序。我不喜欢Oauth2刷新标记的想法,因为它们可能会被盗取,并允许(由合法和恶意用户)并行使用(除非您通过旋转它们来实现盗窃检测(在每次请求时刷新刷新标记),为什么使用他们呢?通过JWT进行应用程序认证和授权

的身份验证流程,工作原理:

  1. 用户与凭据登录享有20分钟的寿命的JWT。
  2. 过期后,通过点击db检查它是否被列入黑名单(relogin),如果不检查它是否用于生成新的令牌,则会刷新jwt。
  3. 如果它从未用于刷新,则会被接受并用于发布低级别访问令牌。
  4. 如果令牌之前使用,或有不同的客户端+设备+用户超过其母公司提供了认证检查(密码或锁屏密码)
  5. 如果获得通过,该检查发出新的第一级令牌列入黑名单的所有父和db上的孩子,就像新的第一个用户登录一样。
  6. 如果锁定屏幕失败,用户将看到登录屏幕。

的问题是:

  1. 什么是可能的安全漏洞? (我发现了两个用例:被盗的有效访问令牌与Oauth令牌持续20分钟相同,在这里没有任何损失,而且被盗的睡眠令牌:用户没有登录说7天,令牌被盗用并被使用直到用户再次登录或令牌链在持续3个月后恢复 - 我们的政策 - 此盗窃的机会很小,因为令牌必须在用户在应用上发出的最后一个请求截获,比偷取Oauth2更新令牌更苗条)
  2. 什么是用户体验攻击者可以在此计划上针对应用程序引发问题?

jwt auth flow

回答

0

的OAuth2 refresh tokens并不意味着移动客户端使用。使用刷新令牌需要客户端凭据,这些凭据不能安全地存储在移动应用程序中。

刷新令牌用于机密客户端(例如服务器端Web应用程序)。它们在使用时经常更新(服务器发回新的访问权限和新的刷新令牌)。与访问令牌相比,刷新令牌仅发送给授权服务器,而不是资源(API)服务器。

关于您的认证流程。第2步是IMO的薄弱环节。您允许客户端使用过期令牌来生成新的访问令牌。因此,如果我找到您的手机并访问设备,它将允许我获取新的访问令牌并冒充您。

您可以强制客户端每15分钟刷新一次令牌,但是您必须定义在应用程序关闭或设备关闭时会发生什么情况?可以重新验证用户身份吗?

+0

您的使用案例:被盗手机会让恶意用户抓住所有持久登录应用程序并冒充你:facebook,google ....所以这个漏洞很常见,这就是为什么在这些应用程序仪表板上撤销设备的原因。 –