DEV Community

Perm Chao
Perm Chao

Posted on

การใช้งาน Keycloak เบื้องต้น

การใช้งาน Keycloak เบื้องต้นเพื่อทำระบบ Login กับ JWT

Base URL ของ Realm และ Client ที่เราสร้าง

https://{{BASE_URL}}/auth/realms/{{REALM}}
Enter fullscreen mode Exit fullscreen mode

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}}'
Enter fullscreen mode Exit fullscreen mode

สิ่งที่จะได้มาจะเป็น

curl -XGET -H 'Content-Type: application/x-www-form-urlencoded' 'https://{{BASE_URL}}/auth/{{VALID_REDIRECT_URI}}?session_state={{SESSION_STATE}}&code={{CODE}}'
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode

เมื่อต้องการ 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'
Enter fullscreen mode Exit fullscreen mode

Response ที่ได้จะเหมือนกับตอนขอ access token

Top comments (4)

Collapse
 
moonoise profile image
moonoise

Keycloak รองรับ oauth 2.0 ไหมครับ

Collapse
 
mossnana profile image
Perm Chao

ได้ครับ

Collapse
 
mobiledev profile image
Done

สอบถามหน่อยครับ จะเข้า keycloak มาใช้กับ mobile app Flutter ยังไงครับ

Collapse
 
mossnana profile image
Perm Chao

สามารถเข้าไปดูวิธีการขอ 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_...