1 什么是OAuth
OAuth(开放授权)是一个开放标准,允许用户 授权第三方应用 访问他们存储在其他服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。
2 什么是OAuth2.0
OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0(即完全废止了OAuth1.0)。很多大公司如Google,Yahoo,Microsoft等都提供了OAuth认证服务,这些都足以说明OAuth标准逐渐成为开放资源授权的标准。
OAuth协议目前发展到2.0版本,1.0版本过于复杂,2.0版本已得到广泛应用。
3 OAuth2.0协议实现认证授权的执行流程
以微信登录京东商城为例:
1、客户端请求第三方授权
用户进入京东商城的登录页面,点击微信的图标以微信账号登录系统,用户本身 在微信里 是信息的资源拥有者。
点击“微信”出现一个二维码,此时用户扫描二维码,开始给京东商城授权。
2、用户同意给京东商城授权
用户扫描二维码表示资源拥有者同意给京东授权,微信会对用户的身份进行验证, 验证通过后,微信会询问用户是否给京东商城授权访问自己的微信数据,用户点击“确认登录”表示同意授权,微信认证服务器会颁发一个授权码,并重定向到京东商城。
3、客户端向认证服务器申请令牌
客户端获取到授权码后,携带授权码向认证服务器发送请求申请令牌,此过程用户是看不到的。
4、认证服务器向客户端响应令牌
微信认证服务器验证客户端请求的授权码,如果合法则给客户端颁发令牌,令牌是客户端访问资源的通行证,此交互过程用户看不到。当客户端拿到令牌后,用户在京东商城看到已经登录成功。
5、客户端请求资源服务器的资源
京东商城携带令牌请求访问微信服务器获取用户的基本信息。
6、资源服务器返回受保护资源
资源服务器校验令牌的合法性,如果合法则向用户响应资源信息内容。
4 OAauth2.0包含的角色
1、客户端
本身不存储资源,需要通过用户的授权去请求资源服务器的资源。
2、资源拥有者
通常为用户,也可以是应用程序,即该资源的拥有者。
3、授权服务器(也称认证服务器)
对资源拥有者的身份进行认证、对访问资源进行授权,认证成功后会给客户端发放令牌
(access_token)作为客户端访问资源服务器的凭据。本例为微信的认证服务器。
4、资源服务器
存储资源的服务器,本例为微信存储的用户信息。
注意事项:
服务提供商不允许 随便一个客户端就可以接入到它的授权服务器,它会给准入的接入方一个身份,用于接入时的凭据:
client_id:客户端标识
client_secret:客户端秘钥
因此,准确来说,授权服务器对OAuth2.0中的两个角色进行认证授权,分别是资源拥有者(用户)、客户端(京东商城)。