1. 程式人生 > >(一)新浪微博_OAuth2.0授權機制

(一)新浪微博_OAuth2.0授權機制

OAuth2.0 概述

   整體來看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中授權方式,可以使開發者快速進行授權

  1. SSO 授權:在有客戶端的情況下,使用 SSO 授權登陸;無客戶端的情況下,自動喚起 Web 授權
  2. Web 授權:在沒有客戶端的情況下,可直接使用該授權
  3. SSO 授權+Web 授權 混合授權, ( 如果手機安裝了微部落格戶端則使用客戶端授權,沒有則進行網頁授權 )
  4. 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就此告一段落,希望能幫助你>_