深入淺出OAuth2 0授權

2021-09-18 08:10:28 字數 1417 閱讀 5524

oauth協議為使用者資源的授權提供了乙個安全的、開放而又簡易的標準。與以往的授權方式不同之處是oauth的授權不會使第三方觸及到使用者的帳號資訊(如使用者名稱與密碼),即第三方無需使用使用者的使用者名稱與密碼就可以申請獲得該使用者資源的授權,因此oauth是安全的。oauth是open authorization的簡寫。

說實話,每次見到官方定義的東西 都想

(╯' - ')╯︵ ┻━┻ (掀桌子) ┬─┬ ノ( ' - 'ノ) 當然如果一切正常,qq會給你返回如下結果

response =
有access_token了還不為所欲為啊,獲取個暱稱,獲取的頭像,沒事發個說說,讀個微博啥的。到此oauth2.0 授權流程基本就結束了。當然這個access_token也是有時間的,一般為兩個小時。過期的話用返回的refresh_token重新整理,因為在請求介面的過程中傳輸的是access_token且只有兩小時的有效時間,即使是被別人截獲了,損失也不會太大,設計兩個小時的過期是為了安全考慮的。因為這一步的access_token是訪問介面的唯一憑據,並不會判斷呼叫者的**。所以是有可能被非法者截獲搞出一些事情的。

q:為什麼不直接發放access_token而非要返回乙個code碼,然後用code換取access_token,這不是多次一舉嗎?

a:首先有這個想法很好,證明你是乙個有思想的同學。當初我也想了好半天。因為qq根據要跳回你的**才行,而跳轉到你的**是302重定向,只能是get請求,所以要傳遞給碼雲一些資料資訊的時候必須在url中新增引數,如果這時直接把access_token傳遞回來,就會暴露出來,這樣就很不安全,而且是依賴瀏覽器的,所以加了一部分,只把code碼傳回來,這樣即使code被暴露了也沒問題,因為碼雲要在再次用code碼和你的client_id,client_secret來請求qq,qq會做驗證,而這一步就可以不依賴瀏覽器了,你可以在伺服器用**模擬http請求獲取acess_token,這樣就比較安全了。

q:為什麼code要設計成一次性的?

a:倘若code能無限次用,那麼當使用者在上述情況下收回了許可權,但是由於code還能用,本身code又關聯了使用者的授權資訊,所以碼雲可能再次用code來換取token,這一步並沒有經過使用者的允許是違法的。所以不能讓code繼續使用。一次code表名了使用者的一次意願,並不是終生的意願。置於code為什麼要設定有效期,我想應該是你如果獲取了code不使用,qq也不會說一直幫你存著吧。

有關oauth的標準協議,各大廠商的內部實現可能不盡相同,有時候傳的引數多多少少會有一點出入,但是大體流程上都是這樣,而且有些必須引數都是一樣的。

可以參考:

一文看懂 深入淺出OAuth2 0授權

一 前言 oauth協議為使用者資源的授權提供了乙個安全的 開放而又簡易的標準。與以往的授權方式不同之處是oauth的授權不會使第三方觸及到使用者的帳號資訊 如使用者名稱與密碼 即第三方無需使用使用者的使用者名稱與密碼就可以申請獲得該使用者資源的授權,因此oauth是安全的。oauth是open a...

Oauth2 0授權方式

oauth2.0是一套標準。這個標準解決了這樣的乙個問題。給第三方應用乙個臨時密碼,過期作廢,而且這個密碼的訪問許可權可由我隨時取消。這樣就足夠安全了。這個臨時密碼就是access token。發放access token的方法就多種多樣了,這些方法叫做授權模式。oauth2為我們提供了四種授權方式...

OAuth2 0認證授權

授權碼模式 authorization code 是功能最完整 流程最嚴密的授權模式。它的特點就是通過客戶端的後台伺服器,與 服務提供商 的認證伺服器進行互動。client id x client secret x response type 表示授權型別,必選項,此處的值固定為 code clie...