โทเค็นการเข้าถึงส่วนบุคคล (Personal access token)
โทเค็นการเข้าถึงส่วนบุคคล (PATs) มอบวิธีที่ปลอดภัยให้ผู้ใช้ในการให้ โทเค็นการเข้าถึง (Access token) โดยไม่ต้องใช้ข้อมูลรับรองหรือการลงชื่อเข้าใช้แบบโต้ตอบ เหมาะสำหรับ CI / CD, สคริปต์ หรือแอปพลิเคชันที่ต้องเข้าถึงทรัพยากรแบบโปรแกรม
การจัดการโทเค็นการเข้าถึงส่วนบุคคล
การใช้งานผ่าน Console
คุณสามารถจัดการโทเค็นการเข้าถึงส่วนบุคคลได้ในหน้ารายละเอียดผู้ใช้ของ Console > การจัดการผู้ใช้ ในการ์ด "การยืนยันตัวตน (Authentication)" คุณจะเห็นรายการโทเค็นการเข้าถึงส่วนบุคคลและสามารถสร้างใหม่ได้
การใช้งานผ่าน Management API
หลังจากตั้งค่า Management API แล้ว คุณสามารถใช้ API endpoints เพื่อสร้าง แสดงรายการ และลบโทเค็นการเข้าถึงส่วนบุคคลได้
ใช้ PAT เพื่อให้โทเค็นการเข้าถึง
หลังจากสร้าง PAT แล้ว คุณสามารถใช้มันเพื่อให้โทเค็นการเข้าถึงกับแอปพลิเคชันของคุณผ่าน endpoint สำหรับแลกเปลี่ยนโทเค็น
โทเค็นการเข้าถึงที่ได้รับโดยใช้ PAT จะทำงาน เหมือนกันทุกประการ กับโทเค็นที่ได้รับผ่านโฟลว์ refresh_token
มาตรฐาน ซึ่งหมายความว่า:
- บริบทองค์กร: โทเค็นที่ได้จาก PAT รองรับสิทธิ์และขอบเขต (scopes) ขององค์กรเช่นเดียวกับโฟลว์ 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
: ไม่จำเป็น ขอบเขตของโทเค็นการเข้าถึง
ตัวอย่างการแลกเปลี่ยนโทเค็น
สำหรับเว็บแอปพลิเคชันแบบดั้งเดิมที่มี app secret:
POST /oidc/token HTTP/1.1
Host: tenant.logto.app
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(app-id:app-secret)>
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&resource=http://my-api.com
&scope=read
&subject_token=pat_W51arOqe7nynW75nWhvYogyc
&subject_token_type=urn%3Alogto%3Atoken-type%3Apersonal_access_token
สำหรับ single-page หรือ native application ที่ไม่มี app secret:
POST /oidc/token HTTP/1.1
Host: tenant.logto.app
Content-Type: application/x-www-form-urlencoded
client_id=your-app-id
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&resource=http://my-api.com
&scope=read
&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",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read"
}
จากนั้นหากคุณถอดรหัสโทเค็นการเข้าถึงด้วย JWT decoder คุณจะได้ payload ตัวอย่างดังนี้:
{
"jti": "VovNyqJ5_tuYac89eTbpF",
"sub": "rkxl1ops7gs1",
"iat": 1756908403,
"exp": 1756912003,
"scope": "read",
"client_id": "your-app-id",
"iss": "https://tenant-id.logto.app/oidc",
"aud": "http://my-api.com"
}
แหล่งข้อมูลที่เกี่ยวข้อง
โทเค็นการเข้าถึงส่วนบุคคลคืออะไร? ควรใช้เมื่อใด?
โทเค็นการเข้าถึงส่วนบุคคล, การยืนยันตัวตนเครื่องต่อเครื่อง (Machine-to-Machine authentication), และคีย์ API: ความหมายและกรณีใช้งานจริง