騰訊微博Android客戶端開發 - OAuth認證介紹

fmms 12年前發布 | 46K 次閱讀 Android Android開發 移動開發

騰訊微博 API OAuth認證介紹

騰訊微博開放平臺,是基于騰訊微博系統,為廣大開發者和用戶提供的開放數據分享與傳播平臺。

廣大開發者和用戶登錄平臺后,就可以使用平臺提供的開放API接口,創建應用從微博系統獲取信息,或將新的信息傳播到整個微博系統中,豐富多樣的API接口和應用,加上您的智慧,將創造出無窮的應用和樂趣。

騰訊微博API采用OAuth協議為第三方提供接入服務,遵循[RFC-5849]規范。有關OAuth認證的詳細說明,請閱讀官方OAuth規范。各種語言的OAuth 客戶端可以在Google-OAuth項目里找到。

騰訊微博API使用OAuth 1.0a版本。

OAuth官網地址:http://www.oauth.net/

OAuth是什么?

OAuth協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。同時,任何第三方都可以使用OAuth認證服務,任何服務提供商都可以實現自身的 OAuth認證服務,因而OAuth是開放的。業界提供了OAuth的多種實現如PHP,JavaScript,Java,Ruby等各種語言開發包,大大節約了程序員的時間,因而OAuth是簡易的。目前互聯網很多服務如Open API,很多大頭公司如Google,Yahoo,Microsoft等都提供了OAuth認證服務,這些都足以說明OAuth標準逐漸成為開放資源授權的標準。

在項目主頁的首頁,可以看到下面這段簡介:
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

大概意思是說OAuth是一種開放的協議,為桌面程序或者基于BS的web應用提供了一種簡單的,標準的方式去訪問需要用戶授權的API服務。OAuth類似于Flickr Auth、Google's AuthSub[1]、Yahoo's BBAuth、 非死book Auth等。

OAuth認證授權具有以下特點:

  • 1. 簡單:不管是OAuth服務提供者還是應用開發者,都很容易于理解與使用;
  • 2. 安全:沒有涉及到用戶密鑰等信息,更安全更靈活;
  • 3. 開放:任何服務提供商都可以實現OAuth,任何軟件開發商都可以使用OAuth;

OAuth的原理認證流程及訪問資源流程

騰訊微博Android客戶端開發 - OAuth認證介紹

騰訊微博API通過以下四個步驟來完成認證授權并訪問或修改受限資源的流程

  1. 1.獲取未授權的Request Token(temporary credentials)
  2. 2.請求用戶授權Request Token
  3. 3.使用授權后的Request Token換取Access Token(token credentials)
  4. 4.使用 Access Token 訪問或修改受保護資源

其中1~3步使用https方式, 第4步使用http方式。


請求簽名說明

所有TOKEN請求和受保護的資源請求必須被簽名,微博開放平臺會根據簽名來判斷請求的合法性。簽名算法使用Signature Base String和密鑰(Secret)生成簽名,參數oauth_signature用于指定簽名。

騰訊微博Android客戶端開發 - OAuth認證介紹

說明:

Signature Base String由以下三部分組成,各項之間使用&符號分隔。

1、Http Method
請求方法,GET/POST

2、URL Encode之后的請求URL(URL要小寫)
例如:
請求URL:https://open.t.qq.com/cgi-bin/request_token
經URL Encode之后的請求URL為:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token

3、URL Encode并排序之后的請求參數
例如: URL請求參數為:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
經URL Encode并排序之后的請求參數格式如下(參數間使用%26(即&符號)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0

算法偽碼:

httpMethod + "&" +
  url_encode(  base_uri ) + "&" +
  sorted_query_params.each  { | k, v |
      url_encode ( k ) + "%3D" +
      url_encode ( v )
  }.join("%26")

密鑰由App Secret和Token Secret組成(中間使用&符號分隔)
簽名算法目前只支持HMAC-SHA1。

獲取未授權的Request Token

通過訪問以下 URL 獲取未授權的 Request Token

https://open.t.qq.com/cgi-bin/request_token

請求參數

參數 意義
oauth_consumer_key App Key(應用信息中的App Key值)
oauth_signature_method 簽名方法,暫只支持HMAC-SHA1
oauth_signature 簽名值,密鑰為:App Secret。計算說明。
oauth_timestamp 時間戳, 其值是距1970 00:00:00 GMT的秒數,必須是大于0的整數
oauth_nonce 單次值,隨機生成的32位字符串,防止重放攻擊(每次請求必須不同)
oauth_callback 認證成功后瀏覽器會被重定向到這個url中
oauth_version(可選) 版本號,如果有必須為“1.0”

返回參數

參數 意義
oauth_token 未授權的Request Token
oauth_token_secret 對應的Request Token Secret
oauth_callback_confirmed 對oauth_callback的確認信號

說明:

用戶授權后web應用將會重定向到oauth_callback。當應用為pc客戶端或手機客戶端應用時,沒有回調url(oauth_callback)的概念,此時設置為字符串null即可。字符串“null”必須是小寫

時間戳與標準時間偏差不得大于8分鐘。

示例:

request_token

https://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0

參數名 參數值
oauth_consumer_key aca77d2eb96f46e1b3353bc6743e8bfc
oauth_signature_method HMAC-SHA1
oauth_signature exxzU/tTbpdicmYHcyYh5kqgYgo=
oauth_timestamp 1299569145
oauth_nonce yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls
oauth_callback null
oauth_version 1.0

返回結果:

oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true

參數名 參數值
oauth_token hdk48Djdsa
oauth_token_secret xyz4992k83j47x0b
oauth_callback_confirmed true

請求用戶授權Request Token

此步驟的目的是請求用戶授權Request Token,請求URL:

https://open.t.qq.com/cgi-bin/authorize

請求參數:

參數 意義
oauth_token 上一步中獲得的未授權的Request Token

返回參數:

參數 意義
oauth_token 用戶授權之后的Token值,與未授權Token值相同。
oauth_verifier 驗證碼

說明:

此頁面中會要求用戶登陸,然后選擇同意或者拒絕對應用授權。

授權成功后:

  • A: web應用會重定向到oauth_callback所指定的URL(含返回參數)。
  • B: 客戶端應用(oauth_callback=null)會在網頁中給出授權碼,用戶需要手工將驗證碼輸入到應用中才能完成授權流程。

示例:

參數 意義
oauth_token hdk48Djdsa
oauth_verifier 473f82d3

oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

使用授權后的Request Token換取Access Token

用戶完成授權后,第三方應用可以通過訪問如下url,將已授權的Request Token換取Access Token。Access Token將被用于訪問或修改受限資源。

https://open.t.qq.com/cgi-bin/access_token

請求參數:

參數 意義
oauth_consumer_key AppKey
oauth_token 第一步中獲得的Request Token
oauth_signature_method 簽名方法,暫只支持HMAC-SHA1
oauth_signature 簽名值,密鑰為:App Secret&Request Token Secret。計算說明。
oauth_timestamp 時間戳, 其值是距1970 00:00:00 GMT的秒數,必須是大于0的整數
oauth_nonce 單次值,隨機生成的32位字符串,防止重放攻擊(每次請求必須不同)
oauth_verifier 上一步請求授權request token時返回的驗證碼
oauth_version(可選) 版本號,有的話必須為“1.0”

返回參數:

參數 意義
oauth_token Access Token
oauth_token_secreate Access Token Secret

說明:

  • 本步驟用于簽名的密鑰為App Secret和Request Token Secret(中間使用&分隔)
  • 獲得返回值后就可以使用Access Token來訪問資源了。
  • Access Token和Access Token Secret永遠不會過期,直到用戶撤銷應用授權或騰訊回收您的app訪問權限才會失效。
    • 用于簽名的Signature Base String格式如下:

      示例:access_token:

      https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0

      參數 意義
      oauth_consumer_key aca77d2eb96f46e1b3353bc6743e8bfc
      oauth_token 6b99583b7bc8446bb57e86128158994f
      oauth_signature_method HMAC-SHA1
      oauth_signature 209vcEaHkmb/QwHqsRU3HRPvlqw=
      oauth_timestamp 1299569210
      oauth_nonce y2FrX7Muouma5vxWTKngEb7uHkRu4P5u
      oauth_verifier 877973
      oauth_version(可選) 1.0

      返回結果:

      oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00

      參數 意義
      oauth_token oauth_token_secreate
      nnch734d00ls2jdk pdkkdhi9sl3r4s00

      至此,您的應用就取得了用戶的授權,請妥善保管獲得的Access Token和Access Token Secret。

      此后,您的應用就可以使用該Access Token訪問騰訊微博了。

      使用Access Token訪問騰訊微博

      獲得Access Token之后,您的應用就可以使用該Access Token訪問騰訊微博。

      在每次調用接口API時,請求都必須包含以下參數:

      參數 意義
      oauth_consumer_key AppKey
      oauth_token Access Token
      oauth_signature_method 簽名方法,暫只支持HMAC-SHA1
      oauth_signature 簽名值,密鑰為:App Secret&Access Token Secret。計算說明。
      oauth_timestamp 時間戳
      oauth_nonce 單次值

      示例:

      調用API:http://open.t.qq.com/api/t/add 發布一條微博:

      參數包括:
      1)接口參數:content和format;
      2)OAuth協議參數

      參數 參數值
      content %E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81
      format json
      oauth_consumer_key aca77d2eb96f46e1b3353bc6743e8bfc
      oauth_nonce Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD
      oauth_signature JuPSe7ibf0uPECp4HcX4Fu9y3l0=
      oauth_signature_method HMAC-SHA1
      oauth_timestamp 1299569293
      oauth_token b8c8f1a888ea4f2887eac88787b6e895
      oauth_version 1.0

      post:

      http://open.t.qq.com/api/t/add?content=%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81&format=json&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD&oauth_signature=JuPSe7ibf0uPECp4HcX4Fu9y3l0=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569293&oauth_token=b8c8f1a888ea4f2887eac88787b6e895&oauth_version=1.0

    </ul>

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!