Learning Outcome & Exercises: Keycloak
Tổng kết chương Keycloak: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?
Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục labs/keycloak.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Dựng Keycloak bằng Docker Compose với realm import, không commit secret.
- Lấy token bằng Authorization Code + PKCE và Client Credentials, giải thích claim trong token.
- Bảo vệ một Spring API bằng Keycloak làm issuer.
2. Basic: Realm import
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
compose.yaml + realm-export.json (client, role, user test); secret đọc từ .env không commit.
Bài liên quan: Keycloak là gì: realm, client, user, role, Dựng Keycloak bằng Docker, export/import realm
Hoàn thành khi:
- docker compose up chạy được
- .env.example thay vì .env
3. Intermediate: Flow đăng nhập
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
Lấy token bằng Client Credentials và Auth Code + PKCE; decode và giải thích iss, aud, realm_access.
Bài liên quan: Các flow đăng nhập: Auth Code + PKCE, Client Credentials, Role, group, mapper và nội dung token
Hoàn thành khi:
- Token decode đã che chữ ký
4. Challenge: SSO & production
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
2 client cùng realm: đăng nhập một lần, logout lan sang client còn lại; ghi checklist HA/backup.
Bài liên quan: SSO, logout và session, Keycloak trên production: HA, LDAP, admin API
Hoàn thành khi:
- Log logout
- Checklist production
5. Tiêu chí hoàn thành chung
- Tự giải thích được bài toán và vì sao chọn giải pháp.
- Code chạy được bằng lệnh ghi trong README, không chứa secret.
- Có test tự động cho happy path và failure path.
- Có log hoặc số đo trong
evidence/chứng minh kết quả. - Có câu trả lời phỏng vấn ngắn bằng tiếng Việt và tiếng Anh.
- README của lab có link ngược về bài học tương ứng.
6. Lab và trạng thái
| Mức | Bài tập | Trạng thái | Test / bằng chứng |
|---|---|---|---|
| Basic | Realm import | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | Flow đăng nhập | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | SSO & production | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
Repo lab: java-backend-interview-labs/labs/keycloak. TODO: link GitHub là placeholder cho tới khi repo được push.
evidence/; chỉ đánh dấu xong khi có bằng chứng.Phỏng vấn hỏi về Keycloak, câu nào hay gặp nhất và trả lời sao?
Q1. Authorization Code + PKCE khác Client Credentials thế nào?
🇻🇳 Tiếng Việt:
Auth Code + PKCE dùng khi có người dùng đăng nhập qua trình duyệt, PKCE chống đánh cắp code. Client Credentials dùng cho service gọi service, không có người dùng.
🇬🇧 English:
Authorization Code with PKCE is for a user signing in through a browser, and PKCE protects the code from interception. Client Credentials is for service-to-service calls with no user involved.
Cách nhớ ngắn gọn
- Mỗi bài tập = code + test + log.
- Luôn có ít nhất một failure case.
- Chưa có bằng chứng thì chưa xong.
Tự kiểm tra
Bài tập Basic (Realm import) được coi là xong khi nào?
docker compose up chạy được; .env.example thay vì .env. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Intermediate (Flow đăng nhập) được coi là xong khi nào?
Token decode đã che chữ ký. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (SSO & production) được coi là xong khi nào?
Log logout; Checklist production. Chưa có code chạy và bằng chứng thì chưa tính là xong.