php oauth v1.0 詳解用戶端和服務端流程與實現_PHP教程

來源:互聯網
上載者:User

php oauth 用戶端和服務端流程與實現

介紹:

1、主要用於第三方擷取使用者資源 普遍用於第三方登入授權擷取使用者資訊

2、是一種協議RFC-5849(不是軟體或服務)

3、認證+授權


流程圖:

各平台流程圖
163 開心網 新浪微博

用戶端與服務端實現:

1、由流程圖我們可以看出需要以下幾步
0、擷取使用者Key與Secret(流程圖之外)【server/create_consumer.php】
1、擷取Request Token 與 Request Secret 【client/get_request_token.php】2、返回Request Token 與 Request Secret 【server/request_token.php】3、重新導向授權頁 ——"【server/authorize.php】4、使用者授權回調 ——|5、擷取Access Token 與 Access Secret 【client/get_access_token.php】6、返回Access Token 與 Access Secret 【server/access_token.php】7、調用api(流程圖之外)【client/get_api.php】8、返回api擷取的資料(流程圖之外)【server/api.php】

代碼目錄結構


2、代碼實現流程

0:server/create_consumer.php用戶端產生consumer key與consumer secret

';echo 'Consumer secret: ' . sha1(OAuthProvider::generateToken(40));

OAuthProvider : OAuth提供者類


generateToken :產生一個隨機令牌

generateToken這個函數需要注意效能我們注意第二個參數 dev/random 與 dev/urandom效能上有區分 此處不做詳細說明請根據自己項目調優

具體效能資訊請參考:/dev/random Mcrypt響應慢的一個原因


sha1:使用HMAC-SHA1演算法產生簽名

百度:OAuth請求可以使用HMAC-SHA1或MD5演算法產生簽名。

新浪微博:OAuth請求都使用HMAC-SHA1演算法產生簽名

開心網:簽名方法,暫只支援HMAC-SHA1


運行結果


1:client/get_request_token.php 擷取Request Token 與 Request Secret

getRequestToken($request_url . '?callback_url=' . $callback_url . '&scope=all');session_start();$_SESSION['oauth_token_secret'] = $tokenInfo['oauth_token_secret'];//此時重新導向到服務端授權並顯示給使用者header('Location: '.$authorize_url.'?oauth_token=' . $token_info['oauth_token']);?>

以上代碼我們會通過

getRequestToken($request_url . '?callback_url=' . $callback_url . '&scope=all')運行服務端代碼

2:server/request_token.php 返回 request_token


通過2中的代碼1擷取到$oauth_token與$oauth_token_secret與oauth_callback_confirmed

之後重新導向到3

3:server/authorize.php

授權驗證 此處應該是需要使用者輸入帳號密碼之後再回調的我為了代碼最基本實現省略了使用者之間預設授權


此處校正是簡略的 預設已經授權直接獲第三方回調地址 (正常情況是使用者授權後服務端通過資料庫擷取第三方回調地址並把 oauth_token授權了 之前oauth_token一直是未授權狀態)

上面代碼通過回調地址把已經授權的request_token(oauth_token)傳到5(4使用者授權此處掠過自己可以加個表單提交作為授權驗證)

5:client/get_access_token.php 擷取access token

setToken($_GET['oauth_token'], $_SESSION['oauth_token_secret']);$tokenInfo = $OAuth->getAccessToken($access_url);var_dump($tokenInfo);

$tokenInfo = $OAuth->getAccessToken($access_url);方法問了6

6:server/access_token.php 返回access token




2:get_request_token一直到6:server/access_token.php流程擷取request_token——》返回request_token——》使用者授權校正authorize——》校正成功回調——》擷取access token——》返回access token
運行結果如下
一直重新導向到get_access_token並擷取了access_token與access_secret
現在我們用戶端(第三方平台)擷取了如下資料$consumer_key :2b4e141bf09beecdeb3479cd106038100febf399
$consumer_secret :fab40ca819c25d5fb4abf3e7cae8da5c25b67d05

$request_token :?程式中間資料(此資料一般是有時效的)$request_secret :?程式中間資料(此資料一般是有時效的)
$access_token :12b6f8f6d6930e0e4d1d024c0f520527d0b84d19 (此資料一般時效為無限長)$access_secret :c77463aff2c1abbd670cfb03df4bb4247910cb78 (此資料一般時效為無限長)


現在我們通過這些參數運行7:get_api.php到8:api.php

7:client/get_api.php 擷取api使用者資料

setToken($access_token, $access_secret);$result = $OAuth->fetch($api_url, array(), OAUTH_HTTP_METHOD_POST);echo $OAuth->getLastResponse();


8:server/api.php 返回使用者資料

consumer_secret = 'fab40ca819c25d5fb4abf3e7cae8da5c25b67d05';    return OAUTH_OK;}function timestampNonceHandler($Provider) {    return OAUTH_OK;}function tokenHandler($Provider) {    $Provider->token = '12b6f8f6d6930e0e4d1d024c0f520527d0b84d19';    $Provider->token_secret = 'c77463aff2c1abbd670cfb03df4bb4247910cb78';    return OAUTH_OK;}$OAuthProvider = new OAuthProvider();$OAuthProvider->consumerHandler('consumerHandler');$OAuthProvider->timestampNonceHandler('timestampNonceHandler');$OAuthProvider->tokenHandler('tokenHandler');try {    $OAuthProvider->checkOAuthRequest();} catch (Exception $exc) {    die(var_dump($exc));}echo 'User Data..';

運行結果下載

註:php oauth v1.0 配置 後並開啟 php_curl 才能運行此(以上)代碼


http://www.bkjia.com/PHPjc/735878.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/735878.htmlTechArticlephp oauth 用戶端和服務端流程與實現 介紹: 1、主要用於第三方擷取使用者資源 普遍用於第三方登入授權擷取使用者資訊 2、是一種協議RFC-5849(...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.