1. 为了理解OAuth的适用场合,让我举一个假设的例子。
有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"能够读取用户自己储存在Google上的照片。
如何让云冲印能够访问位于Google上的照片呢?传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了。这样的做法有很多的缺点,比如:
a) 云冲印有了访问Google全部照片的权限,而实际情况是我们可能仅仅想打印Google中的某一张照片
b) 如果云冲印的网站被黑了,那么保存在云冲印网站上的能够访问Google照片的用户名和密码也就不安全了,但实际上Google网站一直是安全的.
以上只是这种做法众多缺点中的两个缺点,显然这种做法不安全.
2. 为此有了OAuth2.0协议.OAuth2.0协议的全程为Open Standard for Authentication.他的思路是在云冲印和Google之间添加一个授权层,授权层为云冲印颁发一个可以访问Google的AccessToken,而这个行为的授权需要Google照片的拥有者来完成.OAuth2.0有4种授权模式,我们以最复杂的授权码模式为例,来说明OAuth2.0的工作流程.
3. 在讲解OAutn2.0的工作流程之前,先来看几个专用名词.
a)Client:第三方应用程序,本文中又称"客户端"(client),在本文中是"云冲印"应用。
b)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
c)User Agent:用户代理,本文中就是指浏览器。
d)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
e)Resource Owner:资源所有者,本文中又称"用户"(user)。
4. 下图是用户通过浏览器为客户端授权的过程.
1)用户点击授权按钮
2)Client服务器重定向请求到权限服务器,同时将Client相关信息以及请求授权的相关信息以及重定向服务器的地址(这里是指Client地址)作为参数发送给权限服务器.
3)权限服务器返回授权页面,此页面需要用户点击确定
4)用户确定授权
5)权限服务器重定向到Client服务器并将授权码作为参数传递给Client服务器.
6)Client服务器拿着授权码向权限服务器请求AccessToken
7)权限服务器进行验证后返回AccessToken
8]Client服务器返回授权成功页面.
5. 用户为Client服务器授予访问某个Resource Server的临时权限后,就可以直接使用Client了.即可以直接使用云冲印打印位于Google上的招聘了,这个过程,用户不需要感知了.因为他已经授予Client服务器服务Google服务器的权限了.过程如下图:
1)用户访问Client服务器提供的需要访问Resource Server的应用.
2)Client进行相关服务操作,这个过程需要访问Resource Server
3)返回结果给Client服务器
4)返回结果