Oauth2的授權碼模式爲什麼要用code獲取token?而非回跳時直接返回token呢

爲什麼oauth2中的授權碼模式 在獲取token之前非要先到資源服務器獲取一個code 然後才使用資源服務器的code去資源服務器去申請token?而不能在回跳時直接返回token呢?

首先,從產品交互上,我們需要瀏覽器跳轉到“認證服務器”,讓用戶明確表態同不同意“第三方站點”的授權請求。這個時候,瀏覽器訪問的地址已經到“認證服務器”去了,不跳轉回來的話,網頁不在“第三方站點”的控制中,怎麼進行授權成功後的下一步交互呢?授權碼模式的安全考量,是基於產品交互能完成的前提下,考慮如何不在瀏覽器這種暴露 url 的環境裏做到安全的。如果你想表達的是“認證服務器”跳轉回來,但是不帶 code,而是通過 Server 對 Server 將 token 直接給“第三方服務器”。這樣會造成一系列問題:

  1. Http 協議是無狀態的,“第三方服務器”無法從一個 Server 對 Server 的請求輕易區分這個 token 對着自己當前哪個 Session。
  2. 如果依賴第一步裏,“第三方服務器”跳轉到“認證服務器”時傳遞的 GET 參數來作爲 Session 身份區分,又涉及到跳轉本身就是明文,可能被篡改的問題,需要協定複雜的簽名協議來保證安全,這和 OAuth2 希望設計簡潔驗證模式的初衷違背。
  3. 假設安全問題解決了,已跳轉回來的“第三方服務器”網頁需要等待一個不知道何時纔會過來的“認證服務器” Server 回調,才能告訴用戶到底授權成功沒有。遠不如同步主動去請求“認證服務器”獲取方便。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章