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

โทเค็นการเข้าถึงส่วนบุคคล (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

  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: ไม่จำเป็น ขอบเขตของโทเค็นการเข้าถึง

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

สำหรับเว็บแอปพลิเคชันแบบดั้งเดิมที่มี 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: ความหมายและกรณีใช้งานจริง