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實作教學

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.