本文介紹京東聯盟開發過程中OAuth2.0授權過程。
一、OAuth2.0定義
權威定義:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.
OAuth是一個開放協議,允許用戶讓第三方應用以安全且標准的方式獲取該用戶在某一網站、移動或桌面應用上存儲的私密的資源(如用戶個人信息、照片、視頻、聯系人列表),而無需將用戶名和密碼提供給第三方應用。
OAuth 2.0是OAuth協議的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0關注客戶端開發者的簡易性,同時為Web應用,桌面應用和手機,和起居室設備提供專門的認證流程。
OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要分享他們的訪問許可或他們數據的所有內容。
新浪微博和微信中廣泛使用OAuth 2.0協議。
如果要了解更多關於OAuth2.0的技術說明,請參考官方網站 https://oauth.net/2/
二、OAuth2.0配置
配置如下,在回調URL中填下要回調的地址即可。
三、接口定義
目前,京東聯盟的OAuth2.0支持以下方式獲取Access Token。
(1)Authorization Code
此流程要求ISV或商家(自主研發應用)有web服務器,能夠保持應用本身的密鑰以及狀態,可以通過https直接訪問京東的授權服務器。
(2)Native Application
此流程適合ISV或商家(自主研發應用)沒有自己的web服務器,且應用為原生程序,即客戶端應用(同時應用無法與瀏覽器交互,但是可以外調用瀏覽器)。
(3)Refresh token
通過前兩種流程,獲取了Access token以及Rrfresh token(刷新令牌),Access token都有一定的期限,通過服務市場授權應用,Access token期限以購買周期為准。當Access token過期時,用戶可以到京東服務市場重新購買應用。
1. 獲取授權碼Code
接口地址
https://oauth.jd.com/oauth/authorize
獲取授權碼code的參數
參數名稱 | 參數選項 | 描述 |
---|---|---|
response_type | 必須 | 此流程下,該值固定為code |
client_id | 必須 | 即創建應用時的Appkey(從JOS控制台->管理應用中獲取) |
redirect_uri | 必須 | 即應用的回調地址,必須與創建應用時所填回調頁面url一致 |
state | 可選 | 狀態參數,由ISV自定義,頒發授權后會原封不動返回 |
scope | 可選 | 權限參數,API組名串。多個組名時,用","分隔,目前支持參數值:read |
view | 可選 | 移動端授權,該值固定為wap;非移動端授權,無需傳值 |
2. 獲取令牌Access Token
接口地址
https://oauth.jd.com/oauth/token
獲取訪問令牌Access token的參數
參數名稱 | 參數選項 | 描述 |
---|---|---|
grant_type | 必須 | 授權類型,此流程下,該值固定為authorization_code |
code | 必須 | 授權請求返回的授權碼 |
redirect_uri | 必須 | 應用的回調地址,必須與創建應用時所填回調頁面url一致 |
client_id | 必須 | 即創建應用時的Appkey(從JOS控制台->管理應用中獲取) |
client_secret | 必須 | 即創建應用時的Appsecret(從JOS控制台->管理應用中獲取) |
state | 可選 | 狀態參數,由ISV自定義,頒發授權后會原封不動返回 |
四、SDK實現與調用方法
京東聯盟SDK實現代碼如下所示:
其調用方法如下
五、實現效果
當訪問回調地址 http://www.fangbei.org時,將引導使用應用的用戶登錄到如下地址
https://oauth.jd.com/oauth/authorize?response_type=code&client_id=85E279145E324CBDAC10AD6712ED01A3&redirect_uri=http://www.fangbei.org/&scope=snsapi_base&state=&view=123
頁面顯示如下
填寫賬號,密碼,驗證碼之后,點擊登錄,頁面將跳轉到
https://oauth.jd.com/login
界面顯示如下
用戶同意授權,頁面跳轉至應用的回調地址,同時返回授權碼code以及state參數。
http://www.fangbei.org/?code=uRTF98
其中將獲得code信息
再根據code獲得訪問令牌access_token,得到信息如下
{ "access_token":"dfb44f04-1094-4bcc-99d2-d5d3f01ca20e", "code":0, "expires_in":31535999, "refresh_token":"bd7535c2-1493-4596-b3b2-efcfeff635cc", "time":"1494639358958", "token_type":"bearer", "uid":"8705417056", "user_nick":"方倍工作室" }
六、代碼下載
掃描關注下方二維碼,回復 “1241” 獲取