1. OAuth2.0介紹
說到第三方登錄,離不開oauth2.0,oauth2.0是“用戶認(rèn)證和授權(quán)的標(biāo)準(zhǔn)”,是從oauth1.0基礎(chǔ)上發(fā)展來的。下圖是oauth2.0六個(gè)過程分析圖,為了分析這6個(gè)流程,下面我們通過
新浪微盤授權(quán)登錄demo,詳細(xì)解析。
2. 運(yùn)行新浪微盤SDK demo
運(yùn)行新浪微盤(
開發(fā)者網(wǎng)站)sdk demo,使用新浪微博賬號(hào)授權(quán),
3. 分析logcat日志信息
3.1 logcat信息
上面第2步運(yùn)行demo,可以看到eclipse 的logcat打印很多信息,如下:
(1) https://auth.sina.com.cn/oauth2/authorize?
client_id=2330724462&redirect_uri=http%3A%2F%2Fvauth.appsina.com%2Fcallback1.php&display=mobile
(2)http://vauth.appsina.com/callback1.php?code=67db0ec6d0bac50253e254ff03a605fb&state=
(3) https://auth.sina.com.cn/oauth2/access_token?
client_id=2330724462&client_secret=04f81fc56cc936bfc8f0fa1cef285158&
grant_type=authorization_code&code=49ae713e40e740cdb7cf16c92ac7e2ed&
state=&redirect_uri=http%3A%2F%2Fvauth.appsina.com%2Fcallback1.php
下面,我們一步步分析上面logcat信息。
3.2 打開H5授權(quán)頁面
將上面第1步網(wǎng)址拷貝到瀏覽器,發(fā)現(xiàn)其實(shí)就是打開授權(quán)頁面,如下圖(瀏覽器的開發(fā)者視圖顯示的效果):
3.3 授權(quán)回調(diào)
在3.2的頁面中輸入新浪微博賬號(hào)和密碼,授權(quán)登錄,發(fā)現(xiàn)跳轉(zhuǎn)到下面的頁面,這個(gè)頁面就是3.1中l(wèi)ogcat信息的第2條,其實(shí)就是打開授權(quán)回調(diào)頁面:
3.4 獲取token
3.1中第3條logcat信息,其實(shí)就是調(diào)用接口,傳入3.3獲取的參數(shù)code值,獲取access_token,這個(gè)步驟我們可以通過Firefox瀏覽器的RESTClient接口測(cè)試插件來分析,如下:可以看到服務(wù)器返回access_token
4. 分析OAuth2.0六個(gè)流程
上面分析了logcat的信息,現(xiàn)在我們?cè)賮砜纯碠Auth2.0六個(gè)步驟:
4.1 六個(gè)角色
分析6個(gè)流程前,我們首先熟悉幾個(gè)角色:
Client:客戶端,這里指的是新浪微盤SDK demo;
Resource Owner:資源擁有者,這里指的是授權(quán)登錄賬戶;
Authorization Server:授權(quán)服務(wù)器,這里指的是新浪的服務(wù)器;
Resource Server:資源服務(wù)器,提供資源發(fā)服務(wù)器,這些資源比如用戶名、相冊(cè)等,這里的資源服務(wù)器指的是新浪服務(wù)器。
4.2 OAuth2.0六個(gè)流程
如上圖:
A:客戶端發(fā)起授權(quán)請(qǐng)求,其實(shí)就是打開一個(gè)授權(quán)頁面(3.1中的1);
B:用戶(資源擁有者)授權(quán)后,跳轉(zhuǎn)回調(diào)頁,回傳code值(3.1中的2)。
C:發(fā)起授權(quán)請(qǐng)求,獲取access_token,其實(shí)就是使用B中的code,調(diào)用接口(3.1中的3)獲取access_token。
D:授權(quán)服務(wù)器驗(yàn)證,如果通過返回access_token,詳見3.4。
E:使用獲得access_token申請(qǐng)獲取資源,比如我們可以獲取用戶信息,如下:
https://api.weipan.cn/2/account/info?access_token=3a71ce6665v5t4K2xJtU236L9Vfce151
F:資源服務(wù)器返回資源,如下圖返回用戶信息:
以上就是OAuth2.0的6個(gè)流程。