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)
- Tình huống người dùng bấm nút login -> để đăng nhập
- Nhưng lúc này không redirect sang provider để đăng nhập
- Mà nó sẽ bật vào callback của chúng ta với code của nó https://oauth.datintech.site/api/auth/callback?code=4/0Aci98E9zlC4IejZtWLBQycv6tm48n3fVE8 <<<--- code của attacker
-> 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
statengẫ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
- Server hoặc FE gửi cho google lúc xin code chỉ gửi
- 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