การใช้งาน Keycloak เบื้องต้นเพื่อทำระบบ Login กับ JWT
Base URL ของ Realm และ Client ที่เราสร้าง
https://{{BASE_URL}}/auth/realms/{{REALM}}
Endpoints ของ Keycloak ที่เราจะใช้งาน
/protocol/openid-connect/auth
/protocol/openid-connect/token
/protocol/openid-connect/userinfo
ขั้นตอน (ในกรณี Login ผ่านเว็บ Keycloak เอง)
- ไปตั้งค่า Keycloak ให้เรียบร้อยก่อน
- สร้าง Realm ใหม่
- สร้าง Client ใหม่ใน Realm ตัวใหม่นั้น
- ใน Client ให้ไปตั้งค่า
- Root URL ถ้าใช้หน้า Login ใน Keycloak
- Valid Redirect URIs รายชื่อเว็บที่อนุญาติให้ redirect ไปหลัง login เสร็จ
- Base URL
- Web Origins รายชื่อเว็บที่อนุญาติให้ CORs
- สร้าง user ใหม่ใน Realm นั้น
เข้าไป Login ผ่านเว็บ เข้าที่
curl -XGET -H 'Content-Type: application/x-www-form-urlencoded' 'https://{{BASE_URL}}/auth/realms/{{REALM}}/protocol/openid-connect/auth?response_type=code&client_id={{CLIENT_ID}}&redirect_uri={{VALID_REDIRECT_URI}}'
สิ่งที่จะได้มาจะเป็น
curl -XGET -H 'Content-Type: application/x-www-form-urlencoded' 'https://{{BASE_URL}}/auth/{{VALID_REDIRECT_URI}}?session_state={{SESSION_STATE}}&code={{CODE}}'
Parameters ที่เราได้กลับมา
- session_state
- code ชุดรหัสนี้จะเอาไปขอ access token
นำ code ไปขอ access token ที่ URL
curl -XPOST -H 'Content-Type: application/x-www-form-urlencoded' -d 'client_id:{{CLIENT_ID}}
client_secret:
grant_type:authorization_code
code:{{code}}
redirect_uri:{{VALID_REDIRECT_URI}}' 'https://{{BASE_URL}}/auth/realms/{{REALM}}/protocol/openid-connect/token'
Response ที่ได้จะเป็น
{
"access_token": "eyJhbGciOiJSUzI1NiI...",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1Ni...",
"token_type": "Bearer",
"not-before-policy": 0,
"session_state": "3dd8b...",
"scope": "profile email"
}
เมื่อต้องการ Refresh Token
curl -XPOST -H 'Content-Type: application/x-www-form-urlencoded' -d 'client_id:{{CLIENT_ID}}
client_secret:
grant_type:refresh_token
refresh_token:{{REFRESH_TOKEN}}
redirect_uri:{{VALID_REDIRECT_URI}}' 'https://{{BASE_URL}}/auth/realms/{{REALM}}/protocol/openid-connect/token'
Response ที่ได้จะเหมือนกับตอนขอ access token
Top comments (4)
Keycloak รองรับ oauth 2.0 ไหมครับ
ได้ครับ
สอบถามหน่อยครับ จะเข้า keycloak มาใช้กับ mobile app Flutter ยังไงครับ
สามารถเข้าไปดูวิธีการขอ access token ในแบบต่างๆ ได้ในลิงค์ด้านล่างเลยครับ
เข้าใจว่าถ้าเป็น flutter น่าจะดูในหัวข้อ
2.2.3. Resource Owner Password Credentials
keycloak.org/docs/23.0.4/securing_...
หรือจะเป็น
2.2.5. Device Authorization Grant
keycloak.org/docs/23.0.4/securing_...