OAuth 2.0 總結
TLS
請全程使用HTTPS
Spec 1.6. TLS Version與1.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認證(資料放在表單中)
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實作教學