การจัดเก็บโทเค็นของบุคคลที่สาม & การเข้าถึง API
ชุดโทเค็นของบุคคลที่สาม (หรือที่เรียกว่า federated token set) คือประเภทของความลับที่จัดเก็บใน secret vault ของ Logto ใช้สำหรับจัดการโทเค็นการเข้าถึง (Access token) และโทเค็นรีเฟรช (Refresh token) ที่ออกโดยผู้ให้บริการข้อมูลระบุตัวตน (IdP) บุคคลที่สามอย่างปลอดภัย เมื่อผู้ใช้ยืนยันตัวตนผ่านตัวเชื่อมต่อโซเชียลหรือ SSO สำหรับองค์กร Logto จะจัดเก็บโทเค็นที่ออกให้ใน vault โทเค็นเหล่านี้สามารถเรียกใช้เพื่อเข้าถึง API ของบุคคลที่สามในนามของผู้ใช้โดยไม่ต้องยืนยันตัวตนซ้ำ
กรณีการใช้งานทั่วไป
ความสามารถนี้จำเป็นสำหรับแอปพลิเคชันสมัยใหม่ เช่น เอเจนต์ AI แพลตฟอร์ม SaaS เครื่องมือเพิ่มประสิทธิภาพ และแอปสำหรับลูกค้าที่ต้องโต้ตอบกับบริการของบุคคลที่สามในนามของผู้ใช้ ตัวอย่างการใช้งานจริง:
📅 แอปจัดการปฏิทิน: หลังจากผู้ใช้ลงชื่อเข้าใช้ด้วย Google แอป productivity ของคุณสามารถซิงค์กิจกรรมในปฏิทิน สร้างการประชุมใหม่ และส่งคำเชิญโดยไม่ต้องขอให้ผู้ใช้ยืนยันตัวตนซ้ำ
🤖 ผู้ช่วย AI: เอเจนต์ AI สามารถเข้าถึง repository ของผู้ใช้ใน GitHub เพื่อวิเคราะห์โค้ด สร้าง pull request หรือจัดการ issue ทั้งหมดนี้ด้วยความยินยอมเพียงครั้งเดียวของผู้ใช้ระหว่างการลงชื่อเข้าใช้หรือเชื่อมโยงบัญชี
📊 แดชบอร์ดวิเคราะห์ข้อมูล: แพลตฟอร์ม SaaS สามารถดึงข้อมูลจากบัญชีโซเชียลมีเดียที่ผู้ใช้เชื่อมต่อ (Facebook, LinkedIn) เพื่อสร้าง insight และรายงานโดยไม่ขัดจังหวะการทำงานของผู้ใช้ด้วยการขอเข้าสู่ระบบซ้ำ
เปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม
ตัวเชื่อมต่อโซเชียล
ฟีเจอร์นี้ใช้ได้กับ ตัวเชื่อมต่อโซเชียล ที่รองรับการจัดเก็บโทเค็น โทเค็นของบุคคลที่สามจะถูกจัดเก็บระหว่าง การลงชื่อเข้าใช้โซเชียล, การเชื่อมโยงบัญชีโซเชียล, และ เมื่อรีเฟรชโทเค็นเพื่อเข้าถึง API ของบุคคลที่สาม ตัวเชื่อมต่อที่รองรับในปัจจุบัน ได้แก่: GitHub, Google, Facebook, Standard OAuth 2.0, และ Standard OIDC โดยจะทยอยรองรับตัวเชื่อมต่ออื่นเพิ่มเติม
- ไปที่ Console > Connectors > Social Connectors
- เลือกตัวเชื่อมต่อโซเชียลที่ต้องการเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม
- ทำตามคู่มือการตั้งค่าเพื่อกำหนดค่าตัวเชื่อมต่อ รวมถึงเพิ่มขอบเขต (scope) ที่จำเป็นสำหรับเข้าถึง API ของบุคคลที่สาม
- ในหน้า "Setting" ให้เปิดใช้งานตัวเลือก Store tokens for persistent API access
ตัวเชื่อมต่อ Enterprise SSO
การจัดเก็บโทเค็นใช้ได้กับ OIDC ตัวเชื่อมต่อองค์กร ทุกตัว สามารถจัดเก็บโทเค็นการเข้าถึงและโทเค็นรีเฟรชระหว่าง Enterprise Single Sign-On ตัวเชื่อมต่อที่รองรับในปัจจุบัน ได้แก่: Google Workspace, Microsoft Entra ID (OIDC), Okta, และ OIDC (Enterprise)
- ไปที่ Console > Enterprise SSO
- เลือกตัวเชื่อมต่อ Enterprise SSO ที่ต้องการเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม
- ทำตามคู่มือการตั้งค่าเพื่อกำหนดค่าตัวเชื่อมต่อ รวมถึงเพิ่มขอบเขต (scope) ที่จำเป็นสำหรับเข้าถึง API ของบุคคลที่สาม
- ในแท็บ "SSO Experience" ให้เปิดใช้งานตัวเลือก Store tokens for persistent API access
อย่าลืมบันทึกการเปลี่ยนแปลง
การจัดเก็บโทเค็น
เมื่อเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม Logto จะจัดเก็บโทเค็นการเข้าถึง (Access token) และโทเค็นรีเฟรช (Refresh token) ที่ออกโดยผู้ให้บริการข้อมูลระบุตัวตน (IdP) บุคคลที่สามโดยอัตโนมัติทุกครั้งที่ผู้ใช้ยืนยันตัวตนผ่านตัวเชื่อมต่อโซเชียลหรือ Enterprise SSO ซึ่งรวมถึง:
- การลงชื่อเข้าใช้และสมัครด้วยโซเชียล
- การลงชื่อเข้าใช้และสมัครด้วย Enterprise SSO
- การเชื่อมโยงบัญชีโซเชียลผ่าน Account API
โทเค็นที่จัดเก็บจะผูกกับตัวตนโซเชียลหรือ Enterprise SSO ของผู้ใช้ ทำให้สามารถเรียกใช้โทเค็นเพื่อเข้าถึง API ได้ในภายหลังโดยไม่ต้องยืนยันตัวตนซ้ำ
ตรวจสอบสถานะการจัดเก็บโทเค็น
คุณสามารถตรวจสอบสถานะการจัดเก็บโทเค็นของบุคคลที่สามของผู้ใช้ใน Logto Console ได้ดังนี้:
- ไปที่ Console > Users
- คลิกที่ผู้ใช้ที่ต้องการตรวจสอบ จะเข้าสู่หน้ารายละเอียดของผู้ใช้
- เลื่อนไปที่ส่วน Connections ซึ่งจะแสดงการเชื่อมต่อโซเชียลและ Enterprise SSO ทั้งหมดที่เกี่ยวข้องกับผู้ใช้
- แต่ละรายการจะแสดงป้ายสถานะโทเค็นว่ามีการจัดเก็บโทเค็นสำหรับการเชื่อมต่อนั้นหรือไม่
- คลิกรายการการเชื่อมต่อเพื่อดูรายละเอียดเพิ่มเติม รวมถึง metadata ของโทเค็นการเข้าถึงที่จัดเก็บและสถานะโทเค็นรีเฟรช (ถ้ามี)
คุณยังสามารถตรวจสอบตัวตนของผู้ใช้และสถานะการจัดเก็บโทเค็นผ่าน Management API ได้ด้วย:
GET /api/users/{userId}/identities/{target}?includeTokenSecret=true
: ดึงข้อมูลตัวตนโซเชียลและสถานะการจัดเก็บโทเค็นของผู้ใช้ที่เชื่อมโยงกับตัวเชื่อมต่อที่ระบุ (เช่นgithub
,google
ฯลฯ)GET /api/users/{userId}/sso-identities/{ssoConnectorId}?includeTokenSecret=true
: ดึงข้อมูลตัวตน Enterprise SSO และสถานะการจัดเก็บโทเค็นของผู้ใช้ที่เชื่อมโยงกับ SSO connector ID ที่ระบุ
สถานะการจัดเก็บโทเค็น
- Active: มีการจัดเก็บโทเค็นการเข้าถึงและยังใช้งานได้
- Expired: มีการจัดเก็บโทเค็นการเข้าถึงแต่หมดอายุแล้ว หากมีโทเค็นรีเฟรช สามารถใช้เพื่อขอโทเค็นใหม่ได้
- Inactive: ไม่มีการจัดเก็บโทเค็นการเข้าถึงสำหรับการเชื่อมต่อนี้ อาจเกิดจากผู้ใช้ยังไม่เคยยืนยันตัวตนผ่านการเชื่อมต่อนี้ หรือมีการลบการจัดเก็บโทเค็นแล้ว
- Not applicable: ตัวเชื่อมต่อไม่รองรับการจัดเก็บโทเค็น
ข้อมูลเมตาของโทเค็น
เพื่อความถูกต้องและความปลอดภัยของข้อมูล โทเค็นทั้งหมดจะถูกเข้ารหัสก่อนจัดเก็บใน secret vault ค่าจริงของโทเค็นจะเข้าถึงได้เฉพาะผู้ใช้ปลายทางที่ได้รับอนุญาตเท่านั้น นักพัฒนาจะสามารถดึงเฉพาะ metadata ของชุดโทเค็นเพื่อดูสถานะโดยไม่เห็นเนื้อหาที่สำคัญ
createdAt
: เวลาที่มีการเชื่อมต่อและจัดเก็บชุดโทเค็นครั้งแรกใน secret vaultupdatedAt
: เวลาที่ชุดโทเค็นถูกอัปเดตล่าสุด- หากไม่มีโทเค็นรีเฟรช ค่านี้จะเท่ากับ createdAt
- หากมีโทเค็นรีเฟรช ค่านี้จะแสดงเวลาที่รีเฟรชโทเค็นการเข้าถึงล่าสุด
hasRefreshToken
: ระบุว่ามีโทเค็นรีเฟรชหรือไม่ หากตัวเชื่อมต่อรองรับ offline access และมีการกำหนดค่า authorization request อย่างถูกต้อง Logto จะจัดเก็บโทเค็นรีเฟรชเมื่อ IdP ออกให้พร้อมกับโทเค็นการเข้าถึง เมื่อโทเค็นการเข้าถึงหมดอายุและมีโทเค็นรีเฟรชที่ถูกต้อง Logto จะพยายามขอโทเค็นใหม่โดยอัตโนมัติเมื่อผู้ใช้ร้องขอเข้าถึงผู้ให้บริการที่เชื่อมต่อexpiresAt
: เวลาหมดอายุโดยประมาณของโทเค็นการเข้าถึง (หน่วยเป็น วินาที) ค่านี้คำนวณจากexpires_in
ที่ IdP ส่งกลับมา (มีเฉพาะเมื่อผู้ให้บริการส่งexpires_in
กลับมาใน response)scope
: ขอบเขตของโทเค็นการเข้าถึง แสดงสิทธิ์ที่ IdP อนุญาต ใช้เพื่อดูว่าทำอะไรได้บ้างกับโทเค็นที่จัดเก็บ (มีเฉพาะเมื่อผู้ให้บริการส่งscope
กลับมาใน response)tokenType
: ประเภทของโทเค็นการเข้าถึง โดยทั่วไปคือ "Bearer" (มีเฉพาะเมื่อผู้ให้บริการส่งtoken_type
กลับมาใน response)
การเรียกใช้โทเค็น
เมื่อเปิดใช้งานการจัดเก็บโทเค็นและโทเค็นถูกจัดเก็บอย่างปลอดภัยใน secret vault ของ Logto แล้ว ผู้ใช้ปลายทางสามารถเรียกใช้โทเค็นการเข้าถึงของบุคคลที่สามจากแอปของคุณโดยเชื่อมต่อกับ Account API ของ Logto
-
GET /my-account/identities/:target/access-token
: ดึงโทเค็นการเข้าถึงสำหรับตัวตนโซเชียลโดยระบุตัวเชื่อมต่อ (เช่น github, google) -
GET /my-account/sso-identities/:connectorId/access-token
: ดึงโทเค็นการเข้าถึงสำหรับตัวตน Enterprise SSO โดยระบุ connector ID
เรียนรู้วิธี เปิดใช้งาน และ เข้าถึง Account API ด้วยโทเค็นการเข้าถึงที่ออกโดย Logto
การหมุนเวียนโทเค็น
Endpoint สำหรับเรียกใช้โทเค็นจะส่งกลับ:
200
OK: หากดึงโทเค็นการเข้าถึงได้สำเร็จและยังไม่หมดอายุ404
Not Found: หากผู้ใช้ไม่มีตัวตนโซเชียลหรือ Enterprise SSO ที่เกี่ยวข้องกับ target หรือ connector ID ที่ระบุ หรือไม่มีการจัดเก็บโทเค็นการเข้าถึง401
Unauthorized: หากโทเค็นการเข้าถึงหมดอายุ
หากโทเค็นการเข้าถึงหมดอายุและมีโทเค็นรีเฟรช Logto จะพยายามรีเฟรชโทเค็นการเข้าถึงโดยอัตโนมัติและส่งโทเค็นใหม่กลับมาใน response พร้อมอัปเดตการจัดเก็บใน secret vault ด้วยโทเค็นและ metadata ใหม่
การลบการจัดเก็บโทเค็น
การจัดเก็บโทเค็นของบุคคลที่สามจะผูกกับการเชื่อมต่อโซเชียลหรือ Enterprise SSO ของผู้ใช้แต่ละรายโดยตรง หมายความว่าชุดโทเค็นที่จัดเก็บจะถูกลบโดยอัตโนมัติในกรณีต่อไปนี้:
- ตัวตนโซเชียลหรือ Enterprise SSO ที่เกี่ยวข้องถูกลบออกจากบัญชีผู้ใช้
- บัญชีผู้ใช้ถูกลบออกจาก tenant ของคุณ
- ตัวเชื่อมต่อโซเชียลหรือ Enterprise SSO ถูกลบออกจาก tenant ของคุณ
การเพิกถอนโทเค็น
คุณสามารถลบชุดโทเค็นของบุคคลที่สามของผู้ใช้ด้วยตนเองเพื่อเพิกถอนการเข้าถึงได้เช่นกัน:
- จาก Console: ไปที่หน้ารายละเอียดตัวตนของผู้ใช้ เลื่อนไปที่ส่วน Access token (หากมีการจัดเก็บโทเค็น) แล้วคลิกปุ่ม Delete tokens ที่ท้ายส่วน
- ผ่าน Management API:
DELETE /api/secret/:id
: ลบ secret เฉพาะโดยใช้ ID ซึ่งสามารถดูได้จากหน้ารายละเอียดตัวตนของผู้ใช้
การเพิกถอนชุดโทเค็นจะบังคับให้ผู้ใช้ต้องยืนยันตัวตนกับผู้ให้บริการบุคคลที่สามใหม่ก่อนจึงจะเข้าถึง API ได้อีกครั้ง
การยืนยันตัวตนใหม่และการต่ออายุโทเค็น
ในกรณีที่โทเค็นการเข้าถึงที่จัดเก็บหมดอายุ หรือแอปพลิเคชันต้องการขอขอบเขต API เพิ่มเติม ผู้ใช้ปลายทางสามารถยืนยันตัวตนใหม่กับผู้ให้บริการบุคคลที่สามเพื่อรับโทเค็นการเข้าถึงชุดใหม่—โดยไม่ต้องลงชื่อเข้าใช้ Logto ซ้ำ สามารถทำได้ผ่าน Social Verification API ของ Logto ซึ่งอนุญาตให้ผู้ใช้เริ่มต้น federated social authorization flow ใหม่และอัปเดตชุดโทเค็นที่จัดเก็บ
การเริ่ม federated authorization ใหม่ในขณะนี้จำกัดเฉพาะตัวเชื่อมต่อโซเชียล สำหรับตัวเชื่อมต่อ Enterprise SSO การยืนยันตัวตนใหม่และการต่ออายุโทเค็นจำเป็นต้องให้ผู้ใช้เริ่ม flow การยืนยันตัวตนของ Logto ใหม่ทั้งหมด เนื่องจากยังไม่รองรับการ reauthorize กับผู้ให้บริการ Enterprise SSO หลังลงชื่อเข้าใช้
-
ผู้ใช้เริ่มคำขอ social verification โดยเรียก endpoint
POST /api/verification/social
ผู้ใช้อาจระบุขอบเขต (scope) เพิ่มเติมเพื่อขอสิทธิ์จากผู้ให้บริการบุคคลที่สามcurl -X POST https://<your-logto-domain>/api/verification/social \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"state": "<state>",
"connectorId": "<logto_connectorId>",
"redirectUri": "<redirect_uri>",
"scope": "<custom_scope>"
}'- authorization header: โทเค็นการเข้าถึงของผู้ใช้ที่ออกโดย Logto
- connectorId: รหัสตัวเชื่อมต่อโซเชียลใน Logto
- redirectUri: URI ที่จะเปลี่ยนเส้นทางผู้ใช้กลับไปยังแอปของคุณหลังยืนยันตัวตน ต้องลงทะเบียน URI นี้ในแอปของผู้ให้บริการ
- scope: (ไม่บังคับ) ขอบเขตเพิ่มเติมเพื่อขอสิทธิ์จากผู้ให้บริการบุคคลที่สาม หากไม่ระบุจะใช้ขอบเขตเริ่มต้นที่กำหนดไว้ในตัวเชื่อมต่อ
-
Logto สร้าง social verification record ใหม่และส่งคืน social verification ID พร้อม authorization URL เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังผู้ให้บริการบุคคลที่สามสำหรับการยืนยันตัวตน
ตัวอย่าง response:
{
"verificationRecordId": "<social_verification_id>",
"authorizationUri": "<authorization_url>",
"expiresAt": "<expiration_time>"
} -
เปลี่ยนเส้นทางผู้ใช้ไปยัง authorization URL ผู้ใช้ยืนยันตัวตนกับผู้ให้บริการบุคคลที่สามและให้สิทธิ์
-
ผู้ให้บริการบุคคลที่สามเปลี่ยนเส้นทางผู้ใช้กลับไปยังแอปของคุณพร้อม authorization code
-
จัดการ callback โดยส่ง authorization code ไปยัง endpoint verification ของ Logto:
curl -X POST https://<your-logto-domain>/api/verification/social/verify \
-H "Authorization: Bearer <access_token>" \
-d '{
"verificationRecordId": "<social_verification_id>",
"connectorData": {
"code": "<authorization_code>",
"state": "<state>",
"redirectUri": "<redirect_uri>"
}
}'- authorization header: โทเค็นการเข้าถึงของผู้ใช้ที่ออกโดย Logto
- verificationRecordId: social verification ID ที่ได้จากขั้นตอนก่อนหน้า
- connectorData: authorization code และข้อมูลอื่น ๆ ที่ผู้ให้บริการบุคคลที่สามส่งกลับมาใน callback
บันทึก:อย่าลืมตรวจสอบค่า
state
เพื่อป้องกัน CSRF -
Logto ตรวจสอบ authorization code และแลกเปลี่ยนเป็นโทเค็นการเข้าถึงและโทเค็นรีเฟรชใหม่จากผู้ให้บริการบุคคลที่สาม จากนั้นส่งคืน social verification ID ใน response
-
สุดท้าย อัปเดตการจัดเก็บโทเค็นของผู้ใช้โดยเรียก endpoint
PATCH /my-account/identities/:target/access-token
พร้อม social verification ID:curl -X PATCH https://<your-logto-domain>/my-account/identities/<target>/access-token \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"socialVerificationId": "<social_verification_id>"
}'- authorization header: โทเค็นการเข้าถึงของผู้ใช้ที่ออกโดย Logto
- socialVerificationId: social verification record ID ที่ตรวจสอบแล้วจากขั้นตอนก่อนหน้า
การดำเนินการนี้จะอัปเดตชุดโทเค็นของผู้ใช้ใน secret vault ของ Logto ด้วยโทเค็นการเข้าถึงและโทเค็นรีเฟรชใหม่ ทำให้ผู้ใช้เข้าถึง API ของบุคคลที่สามได้โดยไม่ต้องลงชื่อเข้าใช้ Logto ซ้ำ
โทเค็นการเข้าถึงที่อัปเดตจะถูกส่งกลับ