본문으로 건너뛰기

개인 액세스 토큰 (Personal access token)

개인 액세스 토큰 (PAT, Personal access token)은 사용자가 자격 증명과 상호작용 로그인 없이 액세스 토큰 (Access token)을 안전하게 부여할 수 있는 방법을 제공합니다. 이는 CI/CD, 스크립트, 또는 리소스에 프로그래밍 방식으로 접근해야 하는 애플리케이션에 유용합니다.

개인 액세스 토큰 관리하기

콘솔 사용하기

콘솔 > 사용자 관리의 사용자 상세 페이지에서 개인 액세스 토큰을 관리할 수 있습니다. "인증 (Authentication)" 카드에서 개인 액세스 토큰 목록을 확인하고 새로 생성할 수 있습니다.

Management API 사용하기

Management API를 설정한 후, API 엔드포인트를 사용하여 개인 액세스 토큰을 생성, 조회, 삭제할 수 있습니다.

PAT로 액세스 토큰 부여하기

PAT를 생성한 후, 토큰 교환 엔드포인트를 사용하여 애플리케이션에 액세스 토큰을 부여할 수 있습니다.

요청(Request)

애플리케이션은 HTTP POST 메서드를 사용하여 테넌트의 토큰 엔드포인트에 특수한 grant type으로 토큰 교환 요청을 보냅니다. 다음 파라미터들은 application/x-www-form-urlencoded 형식으로 HTTP 요청 엔티티 본문에 포함됩니다.

  1. client_id: 필수. 애플리케이션의 클라이언트 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)

토큰 교환 요청이 성공하면, 테넌트의 토큰 엔드포인트는 사용자의 아이덴티티를 나타내는 액세스 토큰을 반환합니다. 응답은 application/json 형식으로 HTTP 응답 엔티티 본문에 다음 파라미터를 포함합니다.

  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"
}

액세스 토큰 페이로드 예시:

{
"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 키의 정의 및 실제 사용 사례