博客園OAuth2.0 授權及用戶登錄


博客園OAuth2.0 授權及用戶登錄

於日前申請了博客園的API權限,經過一段時間研究,完成了Token獲取、刷新及用戶登錄基本功能的實現。

在進入主題之前先了解一下一個基礎但非常重要的知識grant_type:

authorization_code:授權碼模式(即先登錄獲取code,再獲取token)
password:密碼模式(將用戶名,密碼傳過去,直接獲取token)
client_credentials:客戶端模式(無用戶,用戶向客戶端注冊,然后客戶端以自己的名義向’服務端’獲取資源)
implicit:簡化模式(在redirect_uri 的Hash傳遞token; Auth客戶端運行在瀏覽器中,如JS,Flash)
refresh_token:刷新access_token

獲取Token

獲取token的url是https://api.cnblogs.com/token,此時grant_type取值應該為client_credentials,另外還需要client_id及client_secret。

調試方便,暫時使用postman進行模擬請求。

get-token.jpeg

需要說明的一點是,請求為POST,需要添加兩條header,分別是

Content-Type:application/x-www-form-urlencoded
Authorization:Basic .....

關於Authorization的計算規則,首先需要申請API權限,得到clientId和clientSecret,姜這兩這個值按照client_id:client_secret進行base64編碼,然后添加Basic 即可。

得到的json結構是這個樣子:

{
    "access_token": "",
    "token_type": "bearer",
    "expires_in": 86399
}

可以看到,並沒有refresh_token字段。所以,當token過期的時候,應該怎么刷新呢,那對於這種情況,只能重新請求了。
至於如果刷新token,那就得先登錄才可以獲取到了。下面就講一下如何進行登錄,及主要事項。

用戶登錄

用戶登錄的header和獲取token沒有區別,不過grant_type取值為password,另外還需要提供用戶名及密碼。

llogin.jpeg

需要注意的是,用戶名和密碼需要進行RSA公鑰加密,然后進行base64編碼,至於公鑰,申請API權限的時候會有提供。
此時得到的json數據結構和上面有所不同:

{
    "access_token": " ",
    "token_type": "bearer",
    "expires_in": 86399,
    "refresh_token": " "
}

可以看到多了refresh_token字段,那么這種情況下,當token過期后,就可以使用refresh_token這種方式來獲取新的token,那如果refresh_token也過期的話,就只能重新登錄了。下面就簡單說明一下刷新token的流程。

刷新Token

根據登錄后返回的refresh_token,我們可以在token過期后,使用這個值來重新獲取token而無需重新登錄。

需要注意的是,header與之前有所不同,Authorization的值為 Bearer +access_token的值。另外grant_type取值為refresh_token,還需要post一個字段是refresh_token,也就是登錄時獲取的值。得到的json數據結構和登錄相同。

Content-Type:application/x-www-form-urlencoded
Authorization:Bearer .....

此文只是簡單介紹了一下博客園token獲取及刷新的基本邏輯及注意事項,也作拋磚引玉之用。后續會在android平台上實現一個簡單的實例。

轉載請注明來源!
個人博客同步:http://www.jianshu.com/p/ee06dc6b3b4b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM