Oauth2 單點登錄

oauth2 的受權方式前端

要能訪問各類資源重點是要獲取令牌(token),但根據令牌的獲取方式不一樣,又會有四種受權方式後端

 

  1. 受權碼(authorization-code)
  2. 隱藏式(implicit)
  3. 密碼式(password)
  4. 客戶端憑證(client credentials)

 

受權碼這是最經常使用的一種方式,指的是第三方應用先申請一個受權碼,而後再用該碼獲取令牌,項目中用的就是這種安全

 

隱藏式:容許直接向前端頒發令牌。這種方式沒有受權碼這個中間步驟,因此稱爲(受權碼)"隱藏式"(implicit),通常應用於純前端項目網站

 

密碼式:直接經過用戶名和密碼的方式申請令牌,這方式是最不安全的方式命令行

 

憑證式這種方式的令牌是針對第三方應用,而不是針對用戶的,既某個第三方應用的全部用戶共用一個令牌,通常用於沒有前端的命令行應用code

 

 

第一步,A 網站提供一個連接,用戶點擊後就會跳轉到 B 網站,受權用戶數據給 A 網站使用blog

 

http://b.com/oauth/authorize?token

  response_type=code&ci

  client_id=CLIENT_ID&資源

  redirect_uri=CALLBACK_URL&

  scope=read

用戶跳轉後,B 網站會要求用戶登陸,而後詢問是否贊成給予 A 網站受權。用戶表示贊成,這時 B 網站就會跳回redirect_uri參數指定的網址

 

http://a.com/callback?code=AUTHORIZATION_CODE

 

 

第三步,A 網站拿到受權碼之後,就能夠在後端,向 B 網站請求令牌。

 

http://b.com/oauth/token?

 client_id=CLIENT_ID&

 client_secret=CLIENT_SECRET&

 grant_type=authorization_code&

 code=AUTHORIZATION_CODE&

 redirect_uri=CALLBACK_URL

  

上面 URL 中,client_id參數和client_secret參數用來讓 B 確認 A 的身份(client_secret參數是保密的,所以只能在後端發請求),grant_type參數的值是AUTHORIZATION_CODE,表示採用的受權方式是受權碼,code參數是上一步拿到的受權碼,redirect_uri參數是令牌頒發後的回調網址。

 

第四步,B 網站收到請求之後,就會頒發令牌。具體作法是向redirect_uri指定的網址,發送一段 JSON 數據。

 

{    

  "access_token":"ACCESS_TOKEN",

  "info":{...}

}

 

接下來用戶就能夠根據這個access_token來進行訪問了

 

對於第三方網站來講 可分爲3部分

一、申請code

二、申請token

三、帶着token去請求資源(如:申請獲取用戶信息)

相關文章
相關標籤/搜索