购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 OAuth 2.0:优点、缺点和丑陋的方面

OAuth 2.0非常善于获取用户的委托决策,并通过网络传递出去。它允许多方参与安全决策过程,尤其是在运行期间让最终用户参与决策。它是由多个可移动的组件构成的协议,但是在很多方面它都比其他方案更简单、更安全。

OAuth 2.0的设计中有一个重要的假设,就是不受控的客户端总是比授权服务器或者受保护资源多出好几个数量级(如图1-10所示)。这是合理的,因为单个授权服务器可以很轻松地保护多个资源服务器,并且很可能有许多不同类型的客户端想要访问特定API。一台授权服务器甚至可以有多个不同的客户端信任等级,第12章将对此进行更深入的讨论。这样的架构决策导致的结果就是,尽可能将复杂性从客户端转移到服务端。这对于客户端开发人员来说是好事,因为客户端成了系统中最简单的部分。客户端开发人员不再需要像在先前的安全协议中那样,处理签名规范化以及解析复杂的安全策略文档,也不需要担心处理敏感的用户凭据。OAuth令牌提供了一种比密码略复杂的机制,但如果使用得当,其安全性要比密码高很多。

图 1-10 OAuth生态系统中各组件的相对数量

另一方面,授权服务器和受保护资源要承担更多复杂性和安全性方面的责任。客户端只要保护好自身的客户端凭据和用户的令牌即可,单个客户端被攻破会造成损害,但只有该客户端的用户会受到影响。被攻破的客户端也不会泄露资源拥有者的凭据,因为客户端根本没有机会接触这些凭据。然而,授权服务器则需要管理和保护系统中所有客户端和用户的凭据和令牌。虽然这确实使它更容易成为攻击目标,但是保护单个授权服务器要比保护上千台由不同开发人员开发的客户端容易得多。

OAuth 2.0的可扩展性和模块化是其最大的优势之一,因为这使得该协议适用于各种环境。然而,正是这种灵活性导致不同的实现之间存在基本的兼容性问题。当开发人员想在不同的系统上实现OAuth时,它提供的众多自定义选项容易使人困惑。

更糟糕的是,OAuth的某些自定义选项可能会被用在错误的地方或者实施不当,进而导致不安全的实现。这些漏洞在OAuth威胁模型文档 以及本书讲述漏洞的部分(第7~10章)有详细讨论。可以说,即使一个系统按照规范正确地实现了OAuth,也不意味着该系统在实践中就是安全的。

总的说来,OAuth 2.0是一个很好的协议,但远远称不上完美。就像所有的技术一样,OAuth 2.0也会在未来某个时候迎来它的继任者,但是在写作本书的时候真正的继任者还没有出现。现在看来,OAuth 2.0的继任者很可能是它自身的配置协议或者扩展协议。 5pDVvyuMB4V3SI5odU7KrAk2Wwe82fatLSJihyIFN2iFshI9ZFqmotMKhBYKDW5k

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开