ข้ามไปยังเนื้อหาหลัก

การจัดเก็บโทเค็นของบุคคลที่สาม & การเข้าถึง API

Cloud availabilityOSS availability

ชุดโทเค็นของบุคคลที่สาม (หรือที่เรียกว่า 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 โดยจะมีการเพิ่มการรองรับตัวเชื่อมต่ออื่น ๆ ในอนาคต

  1. ไปที่ Console > Connectors > Social Connectors
  2. เลือกตัวเชื่อมต่อโซเชียลที่คุณต้องการเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม
  3. ทำตามคู่มือการตั้งค่าเพื่อกำหนดค่าตัวเชื่อมต่อ รวมถึงการเพิ่มขอบเขต (scope) ที่จำเป็นเพื่อเข้าถึง API ของบุคคลที่สาม
  4. ในหน้า "Setting" ให้เปิดใช้งานตัวเลือก Store tokens for persistent API access

ตัวเชื่อมต่อ SSO สำหรับองค์กร​

การจัดเก็บโทเค็นสามารถใช้ได้กับ ตัวเชื่อมต่อองค์กร OIDC ทุกตัว โทเค็นการเข้าถึงและโทเค็นรีเฟรชจะถูกจัดเก็บระหว่าง การลงชื่อเข้าใช้ SSO สำหรับองค์กร ตัวเชื่อมต่อที่รองรับในปัจจุบัน ได้แก่: Google Workspace, Microsoft Entra ID (OIDC), Okta, และ OIDC (Enterprise)

  1. ไปที่ Console > Enterprise SSO
  2. เลือกตัวเชื่อมต่อ SSO สำหรับองค์กรที่คุณต้องการเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม
  3. ทำตามคู่มือการตั้งค่าเพื่อกำหนดค่าตัวเชื่อมต่อ รวมถึงการเพิ่มขอบเขต (scope) ที่จำเป็นเพื่อเข้าถึง API ของบุคคลที่สาม
  4. ในแท็บ "SSO Experience" ให้เปิดใช้งานตัวเลือก Store tokens for persistent API access

อย่าลืมบันทึกการเปลี่ยนแปลงของคุณ

การจัดเก็บโทเค็น​

เมื่อเปิดใช้งานการจัดเก็บโทเค็นของบุคคลที่สาม Logto จะจัดเก็บโทเค็นการเข้าถึง (Access token) และโทเค็นรีเฟรช (Refresh token) ที่ออกโดยผู้ให้บริการข้อมูลระบุตัวตน (IdP) บุคคลที่สามโดยอัตโนมัติทุกครั้งที่ผู้ใช้ยืนยันตัวตนผ่านตัวเชื่อมต่อโซเชียลหรือ SSO สำหรับองค์กร ซึ่งรวมถึง:

โทเค็นที่จัดเก็บจะผูกกับตัวตนโซเชียลหรือ SSO สำหรับองค์กรของผู้ใช้ ทำให้สามารถเรียกใช้โทเค็นเหล่านี้ในภายหลังเพื่อเข้าถึง API ได้โดยไม่ต้องยืนยันตัวตนซ้ำ

ตรวจสอบสถานะการจัดเก็บโทเค็น​

คุณสามารถตรวจสอบสถานะการจัดเก็บโทเค็นของบุคคลที่สามของผู้ใช้ใน Logto Console ได้ดังนี้:

  1. ไปที่ Console > Users
  2. คลิกที่ผู้ใช้ที่ต้องการตรวจสอบ จะเข้าสู่หน้ารายละเอียดของผู้ใช้
  3. เลื่อนลงไปที่ส่วน Connections ซึ่งจะแสดงการเชื่อมต่อโซเชียลและ SSO สำหรับองค์กรทั้งหมดที่เกี่ยวข้องกับผู้ใช้
  4. แต่ละรายการจะแสดงป้ายสถานะโทเค็นว่ามีการจัดเก็บโทเค็นสำหรับการเชื่อมต่อนั้นหรือไม่
  5. คลิกรายการการเชื่อมต่อเพื่อดูรายละเอียดเพิ่มเติม รวมถึง metadata ของโทเค็นการเข้าถึงที่จัดเก็บไว้และสถานะโทเค็นรีเฟรช (ถ้ามี)

คุณยังสามารถตรวจสอบตัวตนของผู้ใช้และสถานะการจัดเก็บโทเค็นผ่าน Management API ได้ด้วย:

  • GET /api/users/{userId}/identities/{target}?includeTokenSecret=true: ดึงข้อมูลตัวตนโซเชียลและสถานะการจัดเก็บโทเค็นของผู้ใช้ที่เชื่อมโยงกับตัวเชื่อมต่อที่ระบุ (เช่น github, google ฯลฯ)
  • GET /api/users/{userId}/sso-identities/{ssoConnectorId}?includeTokenSecret=true: ดึงข้อมูลตัวตน SSO สำหรับองค์กรและสถานะการจัดเก็บโทเค็นของผู้ใช้ที่เชื่อมโยงกับ SSO connector ID ที่ระบุ

สถานะการจัดเก็บโทเค็น​

  • Active: มีการจัดเก็บโทเค็นการเข้าถึงและยังใช้งานได้
  • Expired: มีการจัดเก็บโทเค็นการเข้าถึงแต่หมดอายุแล้ว หากมีโทเค็นรีเฟรช สามารถใช้เพื่อขอโทเค็นการเข้าถึงใหม่ได้
  • Inactive: ไม่มีการจัดเก็บโทเค็นการเข้าถึงสำหรับการเชื่อมต่อนี้ อาจเกิดจากผู้ใช้ยังไม่เคยยืนยันตัวตนผ่านการเชื่อมต่อนี้ หรือมีการลบการจัดเก็บโทเค็นแล้ว
  • Not applicable: ตัวเชื่อมต่อนี้ไม่รองรับการจัดเก็บโทเค็น

ข้อมูลเมตาของโทเค็น​

เพื่อความถูกต้องและความปลอดภัยของข้อมูล โทเค็นทั้งหมดจะถูกเข้ารหัสก่อนจัดเก็บใน secret vault ค่าจริงของโทเค็นจะเข้าถึงได้เฉพาะผู้ใช้ปลายทางที่ได้รับอนุญาตเท่านั้น ฝั่งนักพัฒนาจะสามารถดึงเฉพาะ metadata ของชุดโทเค็นเพื่อดูสถานะโดยไม่เปิดเผยข้อมูลสำคัญ

  • createdAt: เวลาที่มีการเชื่อมต่อครั้งแรกและจัดเก็บชุดโทเค็นใน secret vault
  • updatedAt: เวลาที่มีการอัปเดตชุดโทเค็นล่าสุด
    • หากไม่มีโทเค็นรีเฟรช ค่านี้จะเท่ากับ 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: ดึงโทเค็นการเข้าถึงสำหรับตัวตน SSO สำหรับองค์กรโดยระบุ connector ID

ข้อมูล:

หากต้องการเรียกใช้โทเค็นการเข้าถึงของบุคคลที่สาม คุณต้องเปิดใช้งาน Account API สำหรับผู้ใช้ปลายทางที่ Console > Sign-in & Account > Account center ดูวิธี เปิดใช้งาน Account API และ เข้าถึงด้วยโทเค็นการเข้าถึงที่ออกโดย Logto

การหมุนเวียนโทเค็น​

Endpoint สำหรับเรียกโทเค็นจะส่งกลับ:

  • 200 OK: หากดึงโทเค็นการเข้าถึงได้สำเร็จและยังไม่หมดอายุ
  • 404 Not Found: หากผู้ใช้ไม่มีตัวตนโซเชียลหรือ SSO สำหรับองค์กรที่ตรงกับ target หรือ connector ID ที่ระบุ หรือไม่มีการจัดเก็บโทเค็นการเข้าถึง
  • 401 Unauthorized: หากโทเค็นการเข้าถึงหมดอายุ

หากโทเค็นการเข้าถึงหมดอายุและมีโทเค็นรีเฟรช Logto จะพยายามรีเฟรชโทเค็นการเข้าถึงโดยอัตโนมัติและส่งโทเค็นใหม่กลับมาใน response พร้อมอัปเดตการจัดเก็บใน secret vault ด้วยโทเค็นใหม่และ metadata

การลบการจัดเก็บโทเค็น​

การจัดเก็บโทเค็นของบุคคลที่สามจะผูกกับการเชื่อมต่อโซเชียลหรือ SSO สำหรับองค์กรของผู้ใช้แต่ละรายโดยตรง ซึ่งหมายความว่าชุดโทเค็นที่จัดเก็บจะถูกลบโดยอัตโนมัติในกรณีต่อไปนี้:

  • ตัวตนโซเชียลหรือ SSO สำหรับองค์กรที่เกี่ยวข้องถูกลบออกจากบัญชีผู้ใช้
  • บัญชีผู้ใช้ถูกลบออกจาก tenant ของคุณ
  • ตัวเชื่อมต่อโซเชียลหรือ 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 ใหม่ในขณะนี้จำกัดเฉพาะตัวเชื่อมต่อโซเชียลเท่านั้น สำหรับตัวเชื่อมต่อ SSO สำหรับองค์กร การยืนยันตัวตนใหม่และการต่ออายุโทเค็นจำเป็นต้องให้ผู้ใช้เริ่มต้น flow การยืนยันตัวตนของ Logto ใหม่ทั้งหมด เนื่องจากยังไม่รองรับการ reauthorize กับผู้ให้บริการ SSO สำหรับองค์กรหลังลงชื่อเข้าใช้

  1. ผู้ใช้เริ่มต้นคำขอ social verification โดยเรียก endpoint POST /api/verification/social ผู้ใช้อาจระบุ custom 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: (ไม่บังคับ) ขอบเขตเพิ่มเติมที่ต้องการขอสิทธิ์จากผู้ให้บริการบุคคลที่สาม หากไม่ระบุจะใช้ขอบเขตเริ่มต้นที่กำหนดไว้ในตัวเชื่อมต่อ
  2. Logto สร้าง social verification record ใหม่และส่งคืน social verification ID พร้อม authorization URL เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังผู้ให้บริการบุคคลที่สามเพื่อยืนยันตัวตน

    ตัวอย่าง response:

    {
    "verificationRecordId": "<social_verification_id>",
    "authorizationUri": "<authorization_url>",
    "expiresAt": "<expiration_time>"
    }
  3. เปลี่ยนเส้นทางผู้ใช้ไปยัง authorization URL ผู้ใช้ยืนยันตัวตนกับผู้ให้บริการบุคคลที่สามและให้สิทธิ์

  4. ผู้ให้บริการบุคคลที่สามเปลี่ยนเส้นทางผู้ใช้กลับไปยังแอปของคุณพร้อม authorization code

  5. จัดการ 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
    บันทึก:

    อย่าลืมตรวจสอบ parameter state เพื่อป้องกัน CSRF

  6. Logto ตรวจสอบ authorization code และแลกเปลี่ยนเป็นโทเค็นการเข้าถึงและโทเค็นรีเฟรชใหม่จากผู้ให้บริการบุคคลที่สาม จากนั้นส่งคืน social verification ID ใน response

  7. สุดท้าย อัปเดตการจัดเก็บโทเค็นของผู้ใช้โดยเรียก 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 ซ้ำ

    โทเค็นการเข้าถึงที่อัปเดตจะถูกส่งกลับมา