攻击者可以通过哪些不同的方式来破坏 access_token and/or refresh_token?

What are the various possible ways that an attacker can compromise access_token and/or refresh_token?

几乎每个论坛都有很多关于 Web 应用程序安全性(不考虑移动应用程序)的讨论,特别是使用 oauth2 和 jwt。每个人都把他们的 comments/answers 这个和那个,blah..blah..blah 关于安全令牌(假设几乎所有有价值的网络可能在'2016'的这个接近尾声时都变得无状态)。说真的,我不知道它是否如此简单,我发现每个人都写下他们针对假想攻击者的答案,就好像攻击者窃取用户的客户端 Web 应用程序如此轻松和容易 access_token 和 refresh_token.攻击者实际上可以通过哪些方式破坏您在客户端发布 access_token 和 refresh_token 的 Web 应用程序?这种妥协是否也取决于使用网络应用程序的用户?攻击者窃听客户端和授权服务器之间的任何通信有多容易?如果有人想展示,任何开放的代码示例都将受到高度重视。寻求切中要点的答案,而不是关于 Web 应用程序安全性的冗长讨论。如果碰巧是Quora之类的问题,我想道歉。

一般来说,关于 OAuth2 安全性有很多合理的问题。

几年前,当 OAuth2 还只是一个草案时,该规范的主要贡献者之一就该主题撰写了 an interesting blog post。 他是对的:开箱即用,这个框架协议提供了很多可能性来轻松地模拟客户端并访问用户资源或发送包括管理请求在内的有效请求。

主要原因是 RFC6749 明确表明它依赖于 TLS 连接。除非导出访问令牌,否则攻击很少依赖于用户。中间人、恶意移动应用程序、逆向工程、暴力破解……是获取访问令牌的一些可用方法。很难获得所有类型攻击的详尽列表。

但是,由于它是一个框架协议,因此无法阻止实施额外的安全功能。 这就是为什么 the IETF OAuth2 Working Group 致力于一些非常有趣的增强,以保护所有利益相关者(客户端、授权服务器、资源服务器)以及它们之间的通信。

我建议您阅读以下 RFC 或草稿:

此外,您可能还对 token binding draft 感兴趣,这是(从我的观点来看)一项重大改进,因为它将令牌绑定到 TLS 连接。换句话说,即使访问令牌被泄露(或故意导出),也不能使用,因为 TLS 连接会有所不同。

the IETF OAuth2 Working Group 页面上提供了更多与 OAuth2 安全性相关的草稿(请参阅签名请求关闭重定向器X.509 客户端身份验证...).