用户授权 OAuth 2.0
什么是OAuth
OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版。OAuth适用于各种各样的包括提供用户身份验证机制的应用程序,注意是Authorization(授权),而不是Authentication(认证)。用来做Authentication(认证)的标准叫做openid connect。OAuth的全称为“Open Authorization”,所以它是一个开放的协议,目前最新的版本为2.0。
什么时候需要认证?
对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成。具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码加密保存在cookie)与用户提供的凭证进行比较进而确认其真实身份。但是这种由Web应用全权负责的认证方式会带来如下两个问题:
1、对于用户来说,他们不得不针对不同的访问Web应用提供不同的用户凭证。如果这些凭证具有完全不同的密码,我们没有多少人能够记得住,所以对于大部分整天 畅游Internet的网友来说,我想他们在不同的网站注册的帐号都会采用相同的密码。密码的共享必然带来安全隐患,因为我们不能确定Web应用本身是否 值得信任。“信任危机”来源于两个方面:首先是对“人品”缺乏信任,我们不知道他们是否具有保护用户敏感信息的意愿;其次是对“能力”缺乏信任,即我们不 清楚他们是否有能力保护用户的敏感信息,对于知名网站泄露用户帐号信息的情况我们实在已经看的太多了。
2、对于Web应用的提供者来说,他们不得不对花费大量的时间、精力和资源来设计和开发自己的认证系统。在很多情况下,他们提供的是包含多个子系统的一整套解 决方案,如果每个子系统均需要独立的认证,那么投入的成本可想而知。所以他们希望能够提供一个单一的“认证中心”来对整个“生态系统”提供认证,如果这个 认证中心完全由第三方来免费提供,这无疑是最好的选择。
假设我有一件非常重要的文件存储与于瑞士银行的私有保险柜中,如果我需要委托某个人将他提取出来,除了将密码告诉他之外别无他法,但是OAuth的目的却 是定义一种协议帮助资源的拥有者在不提供自身凭证的前提下授权第三方应用以他的名义存取受保护的资源。
OAuth 2.0的几种模式
OAuth定义了四种模式,覆盖了所有的授权应用场景:
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)