O

1. CSRF (Token Injection)

vấn đề: attacker tấn công vào browser của người dùng (bằng js bị nhung vào)

-> State sinh ra để attacker không thể chen chân vào luồng login. có nghĩa là ở đường callback của chúng ta lúc nào cũng check phải có state ... để xác minh người dùng tạo ra flow đăng nhập này.

->>>> State để xác thực người dùng tạo flow chứ không phải ngk ( có xin - có nhận | k xin k nhận )

giải pháp: state

  • FE gửi state ngẫu nhiên
  • lúc redirect về phải trùng state
  • => không trùng = hủy

2. PKCE (Chống Interception)

vấn đề: Public Client (Mobile/SPA) không giữ được secret hacker bắt được code trên URL redirect là đổi được token

giải pháp: Verifier & Challenge

  • tạo verifier_code (random-string) + tạo challenge_code từ challenge method + verifycode+ challenge_method (sha256 thuật toán)
    • Server hoặc FE gửi cho google lúc xin code chỉ gửi challenge_code + challenge_method
  • Lúc cầm code đi exachange thì gửi verifier_code để google verify lại => hacker bắt được code nhưng không có verifier = phế

chốt

  • state cho CSRF dùng để verify khi được callback;
  • PKCE cho provider xác thực flow exchange token -> Provider xác thực lại có phải đúng là user xin code này không