(一)新浪微博_OAuth2.0授權機制
阿新 • • 發佈:2018-12-22
OAuth2.0 概述
整體來看OAuth2.0整個授權驗證流程還是比較簡單的,關於OAuth2.0的授權流程可以參考下面的流程圖。
其中
Client指第三方應用,
Resource Owner指使用者,
Authorization Server是我們的授權伺服器,
Resource Server是API伺服器。
A.客戶端向用戶發出授權請求
B.使用者同意客戶端的請求 (拿到使用者的 授權令牌 grant Token)
C.在經過使用者同意後,客戶端拿著”授權令牌”向授權伺服器請求 “獲取令牌”Access Token
D.授權伺服器經過驗證給予客戶端“獲取令牌”Access Token
E. 客戶端拿著令牌向資源伺服器申請使用者所擁有的資源
F.資源伺服器返回客戶端所需要的資源
這裡大體可以分三步:
1、拿到使用者的 授權Token 這把鑰匙 (A B);
2、用授權Token拿到Access Token這把鑰匙(C D);
3、有了Access Token後,在有效期內我們通過開放平臺給出的相應介面,拿到我們所需要的資源(E F)
OAuth2.0介面
對應上面三步的介面
一、請求使用者的 授權Token //請求示例程式碼 https://api.weibo.com/oauth2/authorize?client_id=APP_KEY&redirect_uri=https://api.weibo.com/oauth2/default.html&response_type=code 二、向授權伺服器 請求 Access Token url---> https://api.weibo.com/oauth2/access_token post請求引數如下 必選 型別及範圍 說明 client_id true string 申請應用時分配的AppKey。 client_secret true string 申請應用時分配的AppSecret。 grant_type true string 請求的型別,填寫authorization_code
當grant_type為authorization_code時
code true string 呼叫authorize獲得的code值。
redirect_uri true string 回撥地址,需需與註冊應用裡的回撥地址一致。
返回的結果json
{
"access_token": "ACCESS_TOKEN",
"expires_in": 1234,
"remind_in":"798114",
"uid":"12341234"
}
至此就拿到了accessToken了,拿到他就可以想資源伺服器通過對應的rest介面申請相應的資源。
新浪微博SDK已經整合好的4中授權方式,可以使開發者快速進行授權
- SSO 授權:在有客戶端的情況下,使用 SSO 授權登陸;無客戶端的情況下,自動喚起 Web 授權
- Web 授權:在沒有客戶端的情況下,可直接使用該授權
- SSO 授權+Web 授權 混合授權, ( 如果手機安裝了微部落格戶端則使用客戶端授權,沒有則進行網頁授權 )
- Code手動授權
第三種方式授權是官方推薦的
mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
mSsoHandler = new SsoHandler(MainActivity.this, mAuthInfo);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSsoHandler.authorize(new AuthListener());
}
});
class AuthListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle bundle) {
mAccessToken = Oauth2AccessToken.parseAccessToken(bundle);
if (mAccessToken != null && mAccessToken.isSessionValid()) {
String phone = mAccessToken.getUid();
Toast.makeText(getApplicationContext(), phone + "", Toast.LENGTH_LONG).show();
AccessTokenKeeper.writeAccessToken(MainActivity.this, mAccessToken);
}
}
@Override
public void onWeiboException(WeiboException e) {
}
@Override
public void onCancel() {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mSsoHandler != null) {
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
確定之後,會返回
{
“access_token”: “SlAV32hkKG”,
“remind_in”: 3600,
“expires_in”: 3600
“refresh_token”: “QXBK19xm62”
}
自此,新浪微博OAuth2.0就此告一段落,希望能幫助你>_