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

โทเค็นการเข้าถึงส่วนบุคคล (Personal access token)

โทเค็นการเข้าถึงส่วนบุคคล (PATs) เป็นวิธีที่ปลอดภัยสำหรับผู้ใช้ในการให้ โทเค็นการเข้าถึง (Access token) โดยไม่ต้องใช้ข้อมูลรับรองหรือการลงชื่อเข้าใช้แบบโต้ตอบ เหมาะสำหรับ CI/CD, สคริปต์ หรือแอปพลิเคชันที่ต้องเข้าถึงทรัพยากรแบบอัตโนมัติ

การจัดการโทเค็นการเข้าถึงส่วนบุคคล

การใช้งานผ่าน Console

คุณสามารถจัดการโทเค็นการเข้าถึงส่วนบุคคลได้ในหน้ารายละเอียดผู้ใช้ของ Console > การจัดการผู้ใช้ ในการ์ด "การยืนยันตัวตน (Authentication)" คุณจะเห็นรายการโทเค็นการเข้าถึงส่วนบุคคลและสามารถสร้างใหม่ได้

การใช้งานผ่าน Management API

หลังจากตั้งค่า Management API แล้ว คุณสามารถใช้ API endpoints เพื่อสร้าง แสดงรายการ และลบโทเค็นการเข้าถึงส่วนบุคคล

ใช้ PAT เพื่อให้โทเค็นการเข้าถึง

หลังจากสร้าง PAT แล้ว คุณสามารถใช้มันเพื่อให้โทเค็นการเข้าถึงกับแอปพลิเคชันของคุณผ่าน endpoint สำหรับแลกเปลี่ยนโทเค็น

ความเทียบเท่าของกระบวนการโทเค็น:

โทเค็นการเข้าถึงที่ได้รับโดยใช้ PAT จะ ทำงานเหมือนกันทุกประการ กับโทเค็นที่ได้รับผ่านกระบวนการ refresh_token มาตรฐาน ซึ่งหมายความว่า:

  • บริบทขององค์กร: โทเค็นที่ได้จาก PAT รองรับสิทธิ์และขอบเขตขององค์กรเช่นเดียวกับกระบวนการ refresh token
  • กระบวนการอนุญาต (Authorization flow): คุณสามารถใช้โทเค็นการเข้าถึงที่แลกด้วย PAT สำหรับ สิทธิ์ขององค์กร และ ทรัพยากร API ระดับองค์กร
  • การตรวจสอบโทเค็น: ใช้ตรรกะการตรวจสอบเดียวกัน ต่างกันเพียงประเภท grant แรกเริ่มเท่านั้น

หากคุณทำงานกับองค์กร รูปแบบการเข้าถึงและสิทธิ์จะเหมือนกันไม่ว่าคุณจะใช้ PAT หรือ refresh token

คำขอ (Request)

แอปพลิเคชันจะส่ง คำขอแลกเปลี่ยนโทเค็น (token exchange request) ไปยัง token endpoint ของ tenant โดยใช้ grant type พิเศษผ่าน HTTP POST พารามิเตอร์ต่อไปนี้จะถูกส่งใน entity-body ของ HTTP request ด้วยรูปแบบ application/x-www-form-urlencoded

  1. client_id: จำเป็น ต้องระบุ client ID ของแอปพลิเคชัน
  2. grant_type: จำเป็น ค่านี้ต้องเป็น urn:ietf:params:oauth:grant-type:token-exchange เพื่อระบุว่ากำลังแลกเปลี่ยนโทเค็น
  3. resource: ไม่จำเป็น ตัวบ่งชี้ทรัพยากร เช่นเดียวกับคำขอโทเค็นอื่น ๆ
  4. scope: ไม่จำเป็น ขอบเขตที่ร้องขอ เช่นเดียวกับคำขอโทเค็นอื่น ๆ
  5. subject_token: จำเป็น PAT ของผู้ใช้
  6. subject_token_type: จำเป็น ประเภทของโทเค็นความปลอดภัยที่ให้ใน subject_token ค่านี้ต้องเป็น urn:logto:token-type:personal_access_token

การตอบกลับ (Response)

หากคำขอแลกเปลี่ยนโทเค็นสำเร็จ token endpoint ของ tenant จะส่งคืนโทเค็นการเข้าถึงที่แสดงตัวตนของผู้ใช้ การตอบกลับจะมีพารามิเตอร์ต่อไปนี้ใน entity-body ของ HTTP response ด้วยรูปแบบ application/json

  1. access_token: จำเป็น โทเค็นการเข้าถึงของผู้ใช้ เช่นเดียวกับคำขอโทเค็นอื่น ๆ เช่น authorization_code หรือ refresh_token
  2. issued_token_type: จำเป็น ประเภทของโทเค็นที่ออก ค่านี้ต้องเป็น urn:ietf:params:oauth:token-type:access_token
  3. token_type: จำเป็น ประเภทของโทเค็น ค่านี้ต้องเป็น Bearer
  4. expires_in: จำเป็น อายุของโทเค็นการเข้าถึง (วินาที)
  5. scope: ไม่จำเป็น ขอบเขตของโทเค็นการเข้าถึง

ตัวอย่างการแลกเปลี่ยนโทเค็น

POST /oidc/token HTTP/1.1
Host: tenant.logto.app
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(client-id:client-secret)>

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&scope=profile
&subject_token=pat_W51arOqe7nynW75nWhvYogyc
&subject_token_type=urn%3Alogto%3Atoken-type%3Apersonal_access_token
HTTP/1.1 200 OK
Content-Type: application/json

{
"access_token": "eyJhbGci...zg",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "profile"
}

ตัวอย่าง payload ของโทเค็นการเข้าถึง:

{
"jti": "iFtbZBeh2M1cTTBuKbHk4",
"sub": "123",
"iss": "https://tenant.logto.app/oidc",
"exp": 1672531200,
"iat": 1672527600,
"scope": "profile",
"client_id": "client-id"
}

โทเค็นการเข้าถึงส่วนบุคคลคืออะไร? ควรใช้เมื่อใด?

โทเค็นการเข้าถึงส่วนบุคคล, การยืนยันตัวตนเครื่องต่อเครื่อง (Machine-to-Machine authentication), และคีย์ API กับกรณีใช้งานจริง