對OAuth1 0協議的理解

2021-06-21 21:26:18 字數 3176 閱讀 8853

oauth

(開放授權)是乙個

開放標準

密碼提供給第三方應用。協議位址為:

研究的是oauth1.0,因為2.0褒貶不一,連創始人都宣布脫離關係了。。。而1.0基本各個大**都支援的不錯

具體舉個例子:

oauth_consumer_key="0685bd9184jfhq22",

oauth_token="ad180jjd733klru7",

oauth_signature_method="hmac-sha1",

oauth_signature="wojio9a2w5mfwdgidvzbtsmk%2fpy%3d",

oauth_timestamp="137131200",

oauth_nonce="4572616e48616d6d65724c61686176",

oauth_version="1.0"

之後的各種操作就可以利用以上的各個變數來進行身份驗證,這樣蝦公尺也不知道使用者的使用者名稱和密碼,但是可以利用微博賬號來作為新的使用者身份。

注意:token指的是上面所有內容,包含所有的key-value,而oauth_token則是指token裡面的一項,用於唯一標識使用者。這點我之前矛盾了很久,到底說的token和oauth_token有沒有區別。。。

下面具體來講oauth身份認證的幾個步驟(結合之前的例子):

注意申請token的**是:

consumer secret - "mcd8bkwgdgphvauvgvz4eqpqdatx89grbunmrd7eh98"

oauth_consumer_key - gddmiqh6jhtmluypg82g

oauth_nonce - qp70enmvz8jvdpevu3ojd2aff7r7odc2xjcn4xlzjqk

oauth_signature_method - hmac-sha1

oauth_timestamp - 1272323042

post&https%3a%2f%2fapi.t.sina.com.cn%2foauth%2frequest_token&oauth_consumer_key%3dgddmiqh6jhtmluypg82g%26oauth_nonce%3dqp70enmvz8jvdpevu3ojd2aff7r7odc2xjcn4xlzjqk%26oauth_signature_method%3dhmac-sha1%26oauth_timestamp%3d1272323042%26oauth_version%3d1.0

由於我們還未獲取到oauth_token和oauth_token_secret,所以我們的base string裡沒有包含oauth_token和oauth_token_secret。

這個時候剛才提過的consumer_key就發揮作用了,用consumer_key作為key對base string進行hmac-sha1簽名,假設得到簽名為「8wui7m5hfqy76nowocthusfgb+q=」,則我們的http請求如下:

oauth_token=8ldizyxqevrfzxfozh5tawj6vzjyulqpl0wueytwc&oauth_token_secret=x6qprnlemw9jbqn4pqvvevg8zlpex6a0toebgwcua
即返回乙個oauth_token和oauth_token_secret

授權的**是:

?oauth_token=8ldizyxqevrfzxfozh5tawj6vzjyulqpl0wueytwc

oauth_token=8ldizyxqevrfzxfozh5tawj6vzjyulqpl0wueytwc&oauth_verifier=pdng57prohapmbhv25rnf75lvrd6jdsni1ajjidyoty

目前已有資訊為:

oauth_consumer_key - gddmiqh6jhtmluypg82g

oauth_nonce - 9zwh6qe0qg7lc1telcn7fhublyvdjeal3mo5uhxn8

oauth_signature_method - hmac-sha1

oauth_token - 8ldizyxqevrfzxfozh5tawj6vzjyulqpl0wueytwc

oauth_timestamp - 1272323047

oauth_verifier - pdng57prohapmbhv25rnf75lvrd6jdsni1ajjidyoty

oauth_version - 1.0

和第一步一樣,利用上述資訊產生乙個base string,如下:

post&https%3a%2f%2fapi.t.sina.com.cn%2foauth%2faccess_token&oauth_consumer_key%3dgddmiqh6jhtmluypg82g%26oauth_nonce%3d9zwh6qe0qg7lc1telcn7fhublyvdjeal3mo5uhxn8%26oauth_signature_method%3dhmac-sha1%26oauth_timestamp%3d1272323047%26oauth_token%3d8ldizyxqevrfzxfozh5tawj6vzjyulqpl0wueytwc%26oauth_verifier%3dpdng57prohapmbhv25rnf75lvrd6jdsni1ajjidyoty%26oauth_version%3d1.0
然後接著進行簽名,這裡的key為oauth_consumer_secret+oauth_token_secret,兩者拼接成乙個key,對上述base string進行簽名。得

「puw/dha4fnljym6rhxk5iu/0fcc=」,於是傳送的http請求如下:

oauth_token=819797-jxq8ayudrmykzvkrgolhxsq67tea5ruc4gjc2rwimw&oauth_token_secret=j6zix3ffa9lofh0aws24m3hcbyxo5ni1iye8efba&user_id=819797&screen_name=openapi

那麼這裡的oauth_token就是access token了,secret也就是access token的密碼

總結:oauth1.0分成3步:1)request token 2) authorize token 3) access token

優點:利用簽名技術保證安全

缺點:太過繁雜,不過貌似是由於http不安全只能設計成這樣。。。

嗯,暫時就先說到這裡吧。。。

開放平台 OAuth1 0

oauth1.0簡介 oauth1.0是rfc制定的標準的第三方 客戶端的認證服務 規範文件在 使用oauth的目的是不讓第三方開發者知道和記錄使用者的使用者名稱和賬號資訊,使用者在第三方應用登入服務的時候是在客戶端提供的登入頁面進行登入和驗證的。下面以weibo的oauth1.0實現為例說明 oa...

開放平台 OAuth1 0

oauth1.0簡介 oauth1.0是rfc制定的標準的第三方 客戶端的認證服務 規範文件在 使用oauth的目的是不讓第三方開發者知道和記錄使用者的使用者名稱和賬號資訊,使用者在第三方應用登入服務的時候是在客戶端提供的登入頁面進行登入和驗證的。下面以weibo的oauth1.0實現為例說明 oa...

開放平台 OAuth1 0

oauth1.0簡介 oauth1.0是rfc制定的標準的第三方 客戶端的認證服務 規範文件在 使用oauth的目的是不讓第三方開發者知道和記錄使用者的使用者名稱和賬號資訊,使用者在第三方應用登入服務的時候是在客戶端提供的登入頁面進行登入和驗證的。下面以weibo的oauth1.0實現為例說明 oa...