PKCE (Proof Key for Code Exchange) chống authorization code interception — trường hợp kẻ tấn công chặn được code ở bước redirect (app mobile đăng ký trùng custom URL scheme, log của trình duyệt, extension...) rồi tự đem đi đổi lấy token.
Cách hoạt động:
1. Client sinh chuỗi ngẫu nhiên code_verifier, tính code_challenge = BASE64URL(SHA256(verifier)).
2. Gửi code_challenge + code_challenge_method=S256 khi xin authorization code.
3. Khi đổi code lấy token thì gửi kèm code_verifier gốc. Server băm lại và so khớp.
Kẻ tấn công cầm được code nhưng không có code_verifier nên không đổi được token.
POST /token
grant_type=authorization_code&code=SplxlOB&code_verifier=dBjftJeZ4CVP...Implicit flow (response_type=token) trả access token thẳng trong URL fragment: token nằm trong history trình duyệt, có thể lọt vào Referer, không có refresh token an toàn, và không có cách nào xác thực client.
- RFC 9700 nói rõ không dùng implicit; SPA và mobile giờ đều dùng Authorization Code + PKCE.
- PKCE hiện được khuyến nghị cho mọi client, kể cả confidential client có client secret.