โทเค็น ID แบบกำหนดเอง
บทนำ
โทเค็น ID (ID token) คือโทเค็นชนิดพิเศษที่กำหนดโดยโปรโตคอล OpenID Connect (OIDC) ทำหน้าที่เป็นการยืนยันตัวตนที่ออกโดยเซิร์ฟเวอร์การอนุญาต (Logto) หลังจากผู้ใช้ได้รับการยืนยันตัวตนสำเร็จ โดยจะบรรจุการอ้างสิทธิ์ (claims) เกี่ยวกับตัวตนของผู้ใช้ที่ได้รับการยืนยัน
แตกต่างจาก โทเค็นการเข้าถึง (Access tokens) ซึ่งใช้สำหรับเข้าถึงทรัพยากรที่ได้รับการป้องกัน โทเค็น ID ถูกออกแบบมาโดยเฉพาะเพื่อส่งข้อมูลตัวตนของผู้ใช้ที่ได้รับการยืนยันไปยังแอปพลิเคชันไคลเอนต์ โทเค็นเหล่านี้เป็น JSON Web Tokens (JWTs) ที่บรรจุการอ้างสิทธิ์เกี่ยวกับเหตุการณ์การยืนยันตัวตนและผู้ใช้ที่ได้รับการยืนยัน
การทำงานของการอ้างสิทธิ์ในโทเค็น ID
ใน Logto การอ้างสิทธิ์ในโทเค็น ID แบ่งออกเป็น 2 ประเภท:
- การอ้างสิทธิ์ OIDC มาตรฐาน (Standard OIDC claims): กำหนดโดยข้อกำหนดของ OIDC การอ้างสิทธิ์เหล่านี้ขึ้นอยู่กับขอบเขต (scopes) ที่ร้องขอระหว่างการยืนยันตัวตน
- การอ้างสิทธิ์แบบขยาย (Extended claims): การอ้างสิทธิ์ที่ Logto ขยายขึ้นเพื่อบรรจุข้อมูลตัวตนเพิ่มเติม โดยควบคุมด้วย โมเดลสองเงื่อนไข (Scope + Toggle)
การอ้างสิทธิ์ OIDC มาตรฐาน
การอ้างสิทธิ์มาตรฐานถูกควบคุมโดยข้อกำหนดของ OIDC อย่างสมบูรณ์ การรวมการอ้างสิทธิ์เหล่านี้ในโทเค็น ID ขึ้นอยู่กับขอบเขตที่แอปพลิเคชันของคุณร้องขอระหว่างการยืนยันตัวตน Logto ไม่อนุญาตให้ปิดหรือเลือกไม่รวมการอ้างสิทธิ์มาตรฐานแต่ละรายการ
ตารางต่อไปนี้แสดงการจับคู่ระหว่างขอบเขตมาตรฐานกับการอ้างสิทธิ์ที่เกี่ยวข้อง:
| ขอบเขต (Scope) | การอ้างสิทธิ์ (Claims) |
|---|---|
openid | sub |
profile | name, family_name, given_name, middle_name, nickname, preferred_username, profile, picture, website, gender, birthdate, zoneinfo, locale, updated_at |
email | email, email_verified |
phone | phone_number, phone_number_verified |
address | address |
ตัวอย่างเช่น หากแอปพลิเคชันของคุณร้องขอขอบเขต openid profile email โทเค็น ID จะรวมการอ้างสิทธิ์ทั้งหมดจากขอบเขต openid, profile และ email
การอ้างสิทธิ์แบบขยาย
นอกเหนือจากการอ้างสิทธิ์ OIDC มาตรฐาน Logto ยังขยายการอ้างสิทธิ์เพิ่มเติมที่บรรจุข้อมูลตัวตนเฉพาะของระบบนิเวศ Logto การอ้างสิทธิ์แบบขยายเหล่านี้จะถูกรวมในโทเค็น ID ตาม โมเดลสองเงื่อนไข ดังนี้:
- เงื่อนไขขอบเขต (Scope condition): แอปพลิเคชันต้องร้องขอขอบเขตที่เกี่ยวข้องระหว่างการยืนยันตัวตน
- Toggle ใน Console: ผู้ดูแลระบบต้องเปิดการรวมการอ้างสิทธิ์นั้นในโทเค็น ID ผ่าน Logto Console
ทั้งสองเงื่อนไขต้องเป็นจริงพร้อมกัน ขอบเขตทำหน้าที่เป็นการประกาศการเข้าถึงในระดับโปรโตคอล ส่วน toggle ทำหน้าที่เป็นการควบคุมการเปิดเผยในระดับผลิตภัณฑ์ — หน้าที่ของแต่ละส่วนชัดเจนและไม่สามารถทดแทนกันได้
ขอบเขตและการอ้างสิทธิ์แบบขยายที่มีให้ใช้งาน
| ขอบเขต (Scope) | การอ้างสิทธิ์ (Claims) | คำอธิบาย | รวมโดยค่าเริ่มต้น |
|---|---|---|---|
custom_data | custom_data | ข้อมูลกำหนดเองที่เก็บในอ็อบเจกต์ผู้ใช้ | |
identities | identities, sso_identities | ข้อมูลบัญชีโซเชียลและ SSO ที่เชื่อมโยงกับผู้ใช้ | |
roles | roles | บทบาทที่กำหนดให้กับผู้ใช้ | ✅ |
urn:logto:scope:organizations | organizations | รหัสองค์กรของผู้ใช้ | ✅ |
urn:logto:scope:organizations | organization_data | ข้อมูลองค์กรของผู้ใช้ | |
urn:logto:scope:organization_roles | organization_roles | การกำหนดบทบาทองค์กรของผู้ใช้ | ✅ |
การตั้งค่าใน Logto Console
เพื่อเปิดใช้งานการอ้างสิทธิ์แบบขยายในโทเค็น ID:
- ไปที่ Console > Custom JWT
- เปิด toggle สำหรับการอ้างสิทธิ์ที่คุณต้องการรวมในโทเค็น ID
- ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณร้องขอขอบเขตที่เกี่ยวข้องระหว่างการยืนยันตัวตน
แหล่งข้อมูลที่เกี่ยวข้อง
โทเค็นการเข้าถึงแบบกำหนดเองOpenID Connect Core - ID Token