Junx
4 min readJan 1, 2018

OAuth原理與Laravel Passport實作(5)

OAuth 2.0 總結

TLS

請全程使用HTTPS

Spec 1.6. TLS Version1.7. HTTP Redirections

錯誤Resource

回傳錯誤訊息時,請使用’error’當錯誤訊息的參數明

Spec 7.2. Error Response

偽造Client

Authorization Server必須Authorization Request與Access Token Request的redirect_uri需與Client註冊的redirect_uri一致

Spec 7.2. Error Response

Client認證

驗證Client ID與secret是否正確

  • HTTP Basic Auth (推薦)
  • POST認證(資料放在表單中)

Spec 2.3.1. Client Password

Authorization Code Grant Flow

  • 可發Refresh Token
  • 需要更嚴謹的檢查Client
  • 適合部署在Server上的應用程式,如Web
  • 可以 Redirection
  • Authorization Request建議放state參數防CSRF
  • Authorization Response檢查state參數與Authorization Request的state參數是否一致防CSRF
  • 有scope則檢查是否合法或是有缺少
  • Authorization Grant必須為短時效,如幾分鐘

Implicit Grant

  • 無法透過Request取得參數
  • 不發Refresh Token
  • JavaScript或移動裝置上的應用程式
  • Access Token可能外洩
  • 可以 Redirection

Resource Owner Password Credentials Grant

  • 內建或官方應用程式,需非常信任Client
  • 可發Refresh Token
  • Resource Owner 的帳密當做 Grant做認證
  • 沒有Redirection

Client Credentials Grant

  • 不發Refresh Token
  • Client ID與secret當做 Grant做認證
  • 不建議發Refresh Token
  • 適合部署在Server上的應用程式,如Web
  • 沒有Redirection

Authorization Endpoint

  • 適用Authorization Code Grant與Implicit Grant
  • 取Authorization Grant用的
  • 支援GET(必要),POST(可選)
  • response_type參數不存在需回傳錯誤

Redirection Endpoint

  • 適用Authorization Code Grant與Implicit Grant
  • 接收Authorization Grant用的
  • Redirection Endpoint與Client的redirect_uri不一致則不做Redirection,要在Authorization Endpoint進來檢查時就回傳錯誤
  • Redirection Endpoint網址需要有path part

Token Endpoint

  • 除了Implicit Grant都適用
  • 請求Access Token用
  • 需在認證Client
  • 必須為POST
  • grant_type參數不存在需回傳錯誤

總結

礙於網路上比較少原理對應實作的文章,所以才決定邊做邊紀錄,如果閱讀時有發現任何錯誤都可在底下留言糾正,在此感謝OAuth 2.0 筆記作者,提供的優質OAuth好文,讓減少我許多學習障礙

參考

1. OAuth 2.0介紹

2. Laravel Passport實作教學