โทเค็น ID แบบกำหนดเอง
บทนำ
โทเค็น ID (ID token) เป็นโทเค็นชนิดพิเศษที่กำหนดโดยโปรโตคอล OpenID Connect (OIDC) ทำหน้าที่เป็นการยืนยันตัวตนที่ออกโดยเซิร์ฟเวอร์การอนุญาต (Logto) หลังจากผู้ใช้ยืนยันตัวตนสำเร็จ โดยจะบรรจุการอ้างสิทธิ์ (claims) เกี่ยวกับตัวตนของผู้ใช้ที่ได้รับการยืนยัน
แตกต่างจาก โทเค็นการเข้าถึง (access tokens) ซึ่งใช้สำหรับเข้าถึงทรัพยากรที่ได้รับการป้องกัน โทเค็น ID ถูกออกแบบมาเพื่อส่งข้อมูลตัวตนของผู้ใช้ที่ได้รับการยืนยันไปยังแอปพลิเคชันไคลเอนต์โดยเฉพาะ โดยเป็น JSON Web Tokens (JWTs) ที่บรรจุการอ้างสิทธิ์เกี่ยวกับเหตุการณ์การยืนยันตัวตนและผู้ใช้ที่ได้รับการยืนยัน
การทำงานของการอ้างสิทธิ์ในโทเค็น ID
ใน Logto การอ้างสิทธิ์ในโทเค็น ID แบ่งออกเป็น 2 ประเภท:
- การอ้างสิทธิ์ OIDC มาตรฐาน: กำหนดโดยข้อกำหนด OIDC โดยสมบูรณ์ การอ้างสิทธิ์เหล่านี้จะถูกกำหนดจากขอบเขต (scopes) ที่ร้องขอระหว่างการยืนยันตัวตน
- การอ้างสิทธิ์แบบขยาย: การอ้างสิทธิ์ที่ Logto ขยายขึ้นเพื่อบรรจุข้อมูลตัวตนเพิ่มเติม โดยควบคุมด้วย โมเดลสองเงื่อนไข (ขอบเขต + สวิตช์เปิด/ปิด)
การอ้างสิทธิ์ OIDC มาตรฐาน
การอ้างสิทธิ์มาตรฐานถูกควบคุมโดยข้อกำหนด OIDC โดยสมบูรณ์ การรวมการอ้างสิทธิ์เหล่านี้ในโทเค็น ID ขึ้นอยู่กับขอบเขตที่แอปพลิเคชันของคุณร้องขอระหว่างการยืนยันตัวตน Logto ไม่ได้ให้ตัวเลือกในการปิดหรือยกเว้นการอ้างสิทธิ์มาตรฐานแต่ละรายการ
ตารางต่อไปนี้แสดงการแมประหว่างขอบเขตมาตรฐานกับการอ้างสิทธิ์ที่เกี่ยวข้อง:
| Scope | Claims |
|---|---|
openid | sub, auth_time, acr, amr (การอ้างสิทธิ์บริบทการยืนยันตัวตนจะถูกรวมเมื่อมีอยู่ในเซสชัน; ดู Step-up authentication) |
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 ตาม โมเดลสองเงื่อนไข ดังนี้:
- เงื่อนไขขอบเขต: แอปพลิเคชันต้องร้องขอขอบเขตที่เกี่ยวข้องระหว่างการยืนยันตัวตน
- สวิตช์ใน Console: ผู้ดูแลระบบต้องเปิดการรวมการอ้างสิทธิ์นั้นในโทเค็น ID ผ่าน Logto Console
ทั้งสองเงื่อนไขต้องเป็นจริงพร้อมกัน ขอบเขตทำหน้าที่เป็นการประกาศการเข้าถึงในระดับโปรโตคอล ส่วนสวิตช์ทำหน้าที่เป็นการควบคุมการเปิดเผยในระดับผลิตภัณฑ์ — หน้าที่ของแต่ละส่วนชัดเจนและไม่สามารถทดแทนกันได้
ขอบเขตและการอ้างสิทธิ์แบบขยายที่มีให้ใช้งาน
| Scope | Claims | คำอธิบาย | รวมโดยค่าเริ่มต้น |
|---|---|---|---|
custom_data | custom_data | ข้อมูลกำหนดเองที่เก็บในอ็อบเจกต์ผู้ใช้ | |
identities | identities, sso_identities | ข้อมูลตัวเชื่อมต่อโซเชียลและ SSO ของผู้ใช้ | |
roles | roles | บทบาท (Role) ที่กำหนดให้ผู้ใช้ | ✅ |
urn:logto:scope:organizations | organizations | รหัสองค์กรของผู้ใช้ | ✅ |
urn:logto:scope:organizations | organization_data | ข้อมูลองค์กรของผู้ใช้ | |
urn:logto:scope:organization_roles | organization_roles | การกำหนดบทบาทในองค์กรของผู้ใช้ | ✅ |
ตั้งค่าใน Logto Console
เพื่อเปิดใช้งานการอ้างสิทธิ์แบบขยายในโทเค็น ID:
- ไปที่ Console > Custom JWT
- เปิดสวิตช์สำหรับการอ้างสิทธิ์ที่คุณต้องการรวมในโทเค็น ID
- ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณร้องขอขอบเขตที่เกี่ยวข้องระหว่างการยืนยันตัวตน
แหล่งข้อมูลที่เกี่ยวข้อง
โทเค็นการเข้าถึงแบบกำหนดเองOpenID Connect Core - ID Token