โทเค็นการเข้าถึงส่วนบุคคล (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
client_id
: จำเป็น ต้องระบุ client ID ของแอปพลิเคชันgrant_type
: จำเป็น ค่านี้ต้องเป็นurn:ietf:params:oauth:grant-type:token-exchange
เพื่อระบุว่ากำลังแลกเปลี่ยนโทเค็นresource
: ไม่จำเป็น ตัวบ่งชี้ทรัพยากร เช่นเดียวกับคำขอโทเค็นอื่น ๆscope
: ไม่จำเป็น ขอบเขตที่ร้องขอ เช่นเดียวกับคำขอโทเค็นอื่น ๆsubject_token
: จำเป็น PAT ของผู้ใช้subject_token_type
: จำเป็น ประเภทของโทเค็นความปลอดภัยที่ให้ในsubject_token
ค่านี้ต้องเป็นurn:logto:token-type:personal_access_token
การตอบกลับ (Response)
หากคำขอแลกเปลี่ยนโทเค็นสำเร็จ token endpoint ของ tenant จะส่งคืนโทเค็นการเข้าถึงที่แสดงตัวตนของผู้ใช้ การตอบกลับจะมีพารามิเตอร์ต่อไปนี้ใน entity-body ของ HTTP response ด้วยรูปแบบ application/json
access_token
: จำเป็น โทเค็นการเข้าถึงของผู้ใช้ เช่นเดียวกับคำขอโทเค็นอื่น ๆ เช่นauthorization_code
หรือrefresh_token
issued_token_type
: จำเป็น ประเภทของโทเค็นที่ออก ค่านี้ต้องเป็นurn:ietf:params:oauth:token-type:access_token
token_type
: จำเป็น ประเภทของโทเค็น ค่านี้ต้องเป็นBearer
expires_in
: จำเป็น อายุของโทเค็นการเข้าถึง (วินาที)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 กับกรณีใช้งานจริง