PHP OAuth 2.0 认证流程..
Mar 11, 2014
####oAuth2.0 授权认证
首先官方文档的一个流程如下图(1.0):
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
图1.0 我以<a href="http://developers.douban.com/wiki/?title=connect" target="_blank">豆瓣登陆</a>来说明上面流程,第三方登陆都是基本都是这么个流程:
-
(A)->(B)流程是获取授权链接,其实就是我们点击豆瓣登陆按钮然后弹出一个登陆的窗口.这一步作为开发人员如果有做过豆瓣登陆的可以从豆瓣开发者里创建应用获取api key 和secret key,Api Key 是用来获取授权链接的,Secret Key是(C)->(D)中来获取Access Token的,豆瓣通过GET获取授权链接如下:
https://www.douban.com/service/auth2/auth? client_id=0b5405e19c58e4cc21fc11a4d50aae64& redirect_uri=https://www.example.com/back& response_type=code& scope=shuo_basic_r,shuo_basic_w,douban_basic_common
获取到授权链接后,就可以直接使用window.open(url)来弹出登陆窗口了
-
(C)->(D)流程是用来获取访问TOKEN的,得到这个Token后才能去访问用户的资源。在第一步中授权链接有注意到有三个参数,其中第一,二个是非常重要的,redirect url 是我自己网站的一个地址,当我们用账号第一次登陆后,资源方会问我们要不要给予第三方(也就是我们开发者的网站)授权,选择是之后,豆瓣就会根据response_type(上面是code)授权我们scope的权限,其实豆瓣会做一个get请求来调用我网站的redirect url,我们开发者就来获得了这个token(POST 方式)。
https://www.douban.com/service/auth2/token? client_id=0b5405e19c58e4cc21fc11a4d50aae64& client_secret=edfc4e395ef93375& redirect_uri=https://www.example.com/back& grant_type=authorization_code& code=9b73a4248
-
(E)->(F)流程就是来访问用户数据的了,通过第二步我们在redirect_url 页面上获得了access Token,接下来我们通过这个token 再去请求豆瓣服务资源,同样有一个开放接口,获取的用户信息后就可以do what you want了
curl "https://api.douban.com/v2/user/~me" -H "Authorization: Bearer a14afef0f66fcffce3e0fcd2e34f6ff4"
以上就是OAuth 2.0 客户的一个流程,及客户端的一些基本操作