본문으로 건너뛰기

계정 및 로그인 ​

로그인, 세션, 개인용 액세스 토큰, 사용자, 그룹, 보안 감사.

이 그룹의 작업과 각 작업의 액세스 규칙, 재시도 규칙, 매개 변수, 응답입니다. 모든 요청에는 키가 포함됩니다: Authorization: Bearer <키>(“인증” 참조).

작업 ​

로그인 ​

POST /api/v1/auth/login

액세스: 누구나, 키 없이 · 재시도: 자동으로 반복하지 않음

계정 name과 password를 12시간 동안 유효한 Bearer 세션 token으로 바꿔 주며, expiresAt과 계정이 함께 반환됩니다. 토큰은 Authorization: Bearer로 전송합니다. 알 수 없는 이름, 잘못된 비밀번호, 비활성화된 계정은 모두 같은 401 invalid_credentials로 응답합니다. 시도는 클라이언트 주소별, 계정별로 제한되며(Retry-After를 포함한 429 rate_limited), 계정은 세션을 최대 32개 유지하므로 새 세션이 생기면 가장 오래된 세션이 종료됩니다.

요청 본문 (application/json)

필드형식필수규칙
namestring예—
passwordstring (password)예—

응답 200

필드형식필수규칙
tokenstring예—
expiresAtstring (date-time)예—
accountobject예—
account.idstring (uuid)예—
account.namestring예—
account.administratorboolean예—
account.enabledboolean예—

응답: 200, 400, 401, 403, 405, 413, 415, 429, 503

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","password":"<password>"}'

계정 등록 ​

POST /api/v1/auth/register

액세스: 누구나, 키 없이 · 재시도: 자동으로 반복하지 않음

name(문자, 숫자, _.- 3–64자)과 password(12–128자)로 일반 계정(관리자는 불가)을 만들고 로그인시켜, login과 같은 12시간 세션과 함께 201로 응답합니다. 서버가 자체 등록을 허용할 때만 동작하며(getAuthOptions 참조) 그렇지 않으면 403 registration_disabled이고, 이미 사용 중인 이름은 409 already_exists입니다. 시도는 클라이언트 주소별로 제한되며(Retry-After를 포함한 429), 자체 등록은 계정이 900개가 되면 중단됩니다.

요청 본문 (application/json)

필드형식필수규칙
namestring예—
passwordstring (password)예—

응답 201

필드형식필수규칙
tokenstring예—
expiresAtstring (date-time)예—
accountobject예—
account.idstring (uuid)예—
account.namestring예—
account.administratorboolean예—
account.enabledboolean예—

응답: 201, 400, 403, 405, 413, 415, 429, 503

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","password":"<password>"}'

로그인 옵션 조회 ​

GET HEAD /api/v1/auth/options

액세스: 누구나, 키 없이 · 재시도: 반복해도 안전함(읽기)

로그인 전에 콘솔이 어떤 양식을 보여 줄지 알려 줍니다. 이 서버에서 registerAccount가 열려 있으면 selfRegistration이 true입니다.

응답 200

필드형식필수규칙
selfRegistrationboolean예—

응답: 200, 400, 403, 503

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/auth/options"

내 개인용 액세스 토큰 목록 ​

GET HEAD /api/v1/auth/tokens

액세스: 로그인한 계정 세션(키는 불가) · 재시도: 반복해도 안전함(읽기)

로그인한 계정의 개인용 액세스 토큰을 활성 토큰부터 나열하며, 이름, 접두사, 범위, 생성 시각, 만료 시각, 마지막 사용 시각, 폐기 여부가 있습니다. 비밀 값은 다시 표시되지 않습니다.

응답 200

필드형식필수규칙
itemsobject 배열예요소 100개 이하
items[].idstring (uuid)예—
items[].namestring예—
items[].prefixstring예—
items[].scopestring예read, read-write 중 하나
items[].createdAtstring (date-time)예—
items[].expiresAtstring (date-time)아니요null일 수 있음
items[].lastUsedAtstring (date-time)아니요null일 수 있음
items[].revokedboolean예—

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/auth/tokens" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

개인용 액세스 토큰 생성 ​

POST /api/v1/auth/tokens

액세스: 로그인한 계정 세션(키는 불가) · 재시도: 자동으로 반복하지 않음

스크립트와 도구가 로그인한 계정으로 동작하게 하는 토큰을 만들며, 비밀 값은 이 응답에서만 볼 수 있습니다. name은 1–64자이고, expiresAt의 기본값은 90일이며 미래 시각이면서 365일 이내여야 하고, scope는 read-write(기본값) 또는 read이며 read는 어떤 것도 변경할 수 없습니다. 토큰에는 관리자 권한이 절대 없고 토큰을 만들 수 없으며, 계정당 활성 토큰은 최대 50개입니다(507 token_limit).

요청 본문 (application/json)

필드형식필수규칙
namestring예—
expiresAtstring (date-time)아니요—
scopestring아니요read, read-write 중 하나

응답 201

필드형식필수규칙
idstring (uuid)예—
namestring예—
prefixstring예—
scopestring예read, read-write 중 하나
createdAtstring (date-time)예—
expiresAtstring (date-time)아니요null일 수 있음
lastUsedAtstring (date-time)아니요null일 수 있음
revokedboolean예—
tokenstring예—

응답: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/auth/tokens" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>"}'

내 개인용 액세스 토큰 폐기 ​

DELETE /api/v1/auth/tokens/{id}

액세스: 로그인한 계정 세션(키는 불가) · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

로그인한 계정의 개인용 액세스 토큰 하나를 폐기하며, 이후 이 토큰을 쓴 요청은 실패합니다. 이미 폐기된 토큰을 다시 폐기해도 성공합니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X DELETE "$ARKVORY_URL/api/v1/auth/tokens/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

로그아웃 ​

POST /api/v1/auth/logout

액세스: 유효한 키 또는 세션 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

Authorization으로 보낸 계정 세션을 종료하며, 그 토큰은 즉시 사용할 수 없게 됩니다. 다른 자격 증명(개인용 토큰이나 서비스 키)으로 호출하면 204로 응답하고 아무것도 폐기하지 않습니다.

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/auth/logout" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

내 비밀번호 변경 ​

POST /api/v1/auth/password

액세스: 로그인한 계정 세션(키는 불가) · 재시도: 자동으로 반복하지 않음

currentPassword를 확인한 뒤 newPassword(12–128자)를 설정하며, 현재 비밀번호가 틀리면 401 current_password_invalid이고 로그인 시도 백오프에 합산됩니다. 성공하면 현재 세션을 포함한 계정의 모든 세션과 모든 개인용 액세스 토큰이 폐기되므로 다시 로그인해야 합니다.

요청 본문 (application/json)

필드형식필수규칙
currentPasswordstring (password)예—
newPasswordstring (password)예—

응답: 204, 400, 401, 403, 404, 405, 409, 413, 415, 422, 429, 503, 507

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/auth/password" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"currentPassword":"<currentPassword>","newPassword":"<newPassword>"}'

현재 신원 조회 ​

GET HEAD /api/v1/auth/me

액세스: 유효한 키 또는 세션 · 재시도: 반복해도 안전함(읽기)

자격 증명이 누구의 것인지 반환합니다. 응답에는 id, 관리자 여부, 자격 증명 종류(session, personal-token, service-key, file-key), 개인용 토큰의 범위, read 또는 write 접근 권한이 있는 리포지토리가 있습니다. 로그인한 사용자를 표시하고 리포지토리를 고를 때 사용하며, 관리형 서비스 키의 정확한 권한은 getOwnPermissions로 확인합니다.

응답 200

필드형식필수규칙
idstring예—
administratorboolean예—
credentialstring아니요session, personal-token, service-key, file-key 중 하나
tokenScopestring아니요read, read-write 중 하나
grantsobject 배열예—
grants[].repositorystring예—
grants[].permissionsstring 배열예각 요소: read, write 중 하나

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/auth/me" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

계정 목록 ​

GET HEAD /api/v1/users

액세스: 관리자 · 재시도: 반복해도 안전함(읽기)

모든 사용자 계정을 이름순으로 나열하며, ID, 이름, 관리자 플래그, 활성화 여부가 있습니다. 서버가 보유할 수 있는 계정은 최대 1,000개입니다.

응답 200

필드형식필수규칙
itemsobject 배열아니요—
items[].idstring (uuid)예—
items[].namestring예—
items[].administratorboolean예—
items[].enabledboolean예—

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/users" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

계정 생성 ​

POST /api/v1/users

액세스: 관리자 · 재시도: 자동으로 반복하지 않음

name(문자, 숫자, _.- 3–64자), password(12–128자), administrator(기본값 false)로 계정을 만들고 201로 응답합니다. 이미 사용 중인 이름은 409 already_exists이며, 서버가 보유할 수 있는 계정은 최대 1,000개입니다(507 account_limit).

요청 본문 (application/json)

필드형식필수규칙
namestring예—
passwordstring (password)예—
administratorboolean아니요—

응답 201

필드형식필수규칙
idstring (uuid)예—
namestring예—
administratorboolean예—
enabledboolean예—

응답: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/users" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","password":"<password>"}'

계정 활성화, 비활성화, 재설정 ​

PATCH /api/v1/users/{id}

액세스: 관리자 · 재시도: 자동으로 반복하지 않음

계정의 enabled를 변경하거나 새 password를 설정하며(둘 다 가능), 관리자 플래그는 여기서 변경할 수 없습니다. 비활성화하면 계정의 모든 세션이 종료되고 비활성 상태인 동안 개인용 토큰도 동작하지 않습니다. 비밀번호를 재설정하면 모든 세션이 종료되고 모든 개인용 토큰이 폐기됩니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—

요청 본문 (application/json)

필드형식필수규칙
enabledboolean아니요—
passwordstring (password)아니요—

응답 200

필드형식필수규칙
idstring (uuid)예—
namestring예—
administratorboolean예—
enabledboolean예—

응답: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

예제

bash
curl -X PATCH "$ARKVORY_URL/api/v1/users/$ID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

계정의 개인용 액세스 토큰 목록 ​

GET HEAD /api/v1/users/{id}/tokens

액세스: 관리자 · 재시도: 반복해도 안전함(읽기)

임의 계정의 개인용 액세스 토큰을 활성 토큰부터 나열하며, 이름, 접두사, 범위, 생성, 만료, 마지막 사용, 폐기 정보가 있고 비밀 값은 절대 포함하지 않습니다. 계정을 비활성화하거나 재설정하기 전에 자동화를 검토하는 데 사용합니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—

응답 200

필드형식필수규칙
itemsobject 배열예요소 100개 이하
items[].idstring (uuid)예—
items[].namestring예—
items[].prefixstring예—
items[].scopestring예read, read-write 중 하나
items[].createdAtstring (date-time)예—
items[].expiresAtstring (date-time)아니요null일 수 있음
items[].lastUsedAtstring (date-time)아니요null일 수 있음
items[].revokedboolean예—

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/users/$ID/tokens" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

계정의 개인용 액세스 토큰 폐기 ​

DELETE /api/v1/users/{id}/tokens/{tokenId}

액세스: 관리자 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

계정 id의 개인용 액세스 토큰 하나를 폐기하며, 이후 이 토큰을 쓴 요청은 실패하고 이 이벤트는 보안 감사 기록에 남습니다. 이미 폐기된 토큰을 다시 폐기해도 성공합니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—
tokenId경로string (uuid)예—

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X DELETE "$ARKVORY_URL/api/v1/users/$ID/tokens/$TOKENID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

액세스 그룹 목록 ​

GET HEAD /api/v1/access-groups

액세스: 관리자 · 재시도: 반복해도 안전함(읽기)

모든 액세스 그룹을 구성원 계정 ID와 리포지토리 권한 부여(read 또는 write)와 함께 나열합니다. 서버가 보유할 수 있는 그룹은 최대 100개이며, 구성원 관계와 권한 부여는 각각 최대 10,000개입니다.

응답 200

필드형식필수규칙
itemsobject 배열아니요—
items[].idstring (uuid)예—
items[].namestring예—
items[].membersstring (uuid) 배열예—
items[].grantsobject 배열예—
items[].grants[].repositorystring예—
items[].grants[].accessstring예read, write 중 하나

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/access-groups" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

액세스 그룹 생성 ​

POST /api/v1/access-groups

액세스: 관리자 · 재시도: 자동으로 반복하지 않음

name(문자, 숫자, _.- 2–64자)으로 빈 그룹을 만들고 201로 응답하며, 이미 사용 중인 이름은 409 already_exists입니다. 구성원은 addGroupMember로, 리포지토리는 setGroupGrant로 추가합니다.

요청 본문 (application/json)

필드형식필수규칙
namestring예—

응답 201

필드형식필수규칙
idstring (uuid)예—
namestring예—
membersstring (uuid) 배열예—
grantsobject 배열예—
grants[].repositorystring예—
grants[].accessstring예read, write 중 하나

응답: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

예제

bash
curl -X POST "$ARKVORY_URL/api/v1/access-groups" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>"}'

그룹에 계정 추가 ​

PUT /api/v1/access-groups/{id}/members/{userId}

액세스: 관리자 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

계정 userId를 그룹의 구성원으로 만들며, 다음 요청부터 그룹의 리포지토리 접근 권한을 얻습니다. 이미 구성원인 계정을 추가해도 아무것도 바뀌지 않으며, 구성원 관계는 전체 최대 10,000개입니다(507 membership_limit).

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—
userId경로string (uuid)예—

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X PUT "$ARKVORY_URL/api/v1/access-groups/$ID/members/$USERID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

그룹에서 계정 제거 ​

DELETE /api/v1/access-groups/{id}/members/{userId}

액세스: 관리자 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

계정 userId를 그룹에서 제거하며, 그룹을 통해 가졌던 접근 권한은 다음 요청부터 사라집니다. 구성원이 아닌 계정을 제거해도 성공합니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—
userId경로string (uuid)예—

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X DELETE "$ARKVORY_URL/api/v1/access-groups/$ID/members/$USERID" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

그룹에 리포지토리 접근 권한 부여 ​

PUT /api/v1/access-groups/{id}/grants/{repository}

액세스: 관리자 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

그룹 구성원에게 repository에 대한 access(read 또는 write)를 부여하며, 해당 리포지토리에 대한 그룹의 이전 부여를 대체하고 구성원의 다음 요청부터 적용됩니다. 리포지토리는 별도로 만들 필요가 없으며, 권한을 부여하면 구성원에게 보이게 됩니다. 권한 부여는 전체 최대 10,000개입니다(507 grant_limit).

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—
repository경로string예—

요청 본문 (application/json)

필드형식필수규칙
accessstring예read, write 중 하나

응답: 204, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

예제

bash
curl -X PUT "$ARKVORY_URL/api/v1/access-groups/$ID/grants/$REPOSITORY" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"access":"read"}'

그룹의 리포지토리 접근 권한 제거 ​

DELETE /api/v1/access-groups/{id}/grants/{repository}

액세스: 관리자 · 재시도: 반복해도 안전함: 같은 요청은 같은 결과를 냄

repository에 대한 그룹의 권한 부여를 제거하며, 구성원은 다른 그룹을 통해 가진 접근 권한만 유지합니다. 없는 권한 부여를 제거해도 성공합니다.

매개 변수

이름위치형식필수규칙
id경로string (uuid)예—
repository경로string예—

응답: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507

예제

bash
curl -X DELETE "$ARKVORY_URL/api/v1/access-groups/$ID/grants/$REPOSITORY" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

보안 감사 기록 조회 ​

GET HEAD /api/v1/security/audit

액세스: 관리자 · 재시도: 반복해도 안전함(읽기)

로그인, 등록, 계정·그룹·권한 부여·비밀번호·개인용 토큰 변경의 추가 전용(append-only) 저널을 최신순으로 반환하며, 각 항목에 행위자, 자격 증명 종류, 대상, 결과, 클라이언트 주소가 있습니다. 제한된 시도는 저널에 기록되지 않습니다. 페이지는 limit개 항목(1–100, 기본 50)으로 구성되며 after에 next 값을 넣어 이어서 조회합니다.

매개 변수

이름위치형식필수규칙
after쿼리string아니요10진수 숫자로 쓴 정수이며 문자열로 전송
limit쿼리integer아니요1–100

응답 200

필드형식필수규칙
itemsobject 배열예요소 100개 이하
items[].idstring예10진수 숫자로 쓴 정수이며 문자열로 전송
items[].occurredAtstring (date-time)예—
items[].actorstring예null일 수 있음
items[].credentialstring예session, personal-token, service-key, file-key 중 하나; null일 수 있음
items[].clientIpstring예null일 수 있음
items[].actionstring예—
items[].targetstring예null일 수 있음
items[].outcomestring예success, failure, denied 중 하나
items[].codestring예null일 수 있음
items[].detailsobject예—
nextstring예null일 수 있음

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/security/audit" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

내 유효 권한 조회 ​

GET HEAD /api/v1/auth/permissions

액세스: 유효한 키 또는 세션 · 재시도: 반복해도 안전함(읽기)

호출자의 profile(관리형 서비스 키는 managed, 그 외는 legacy), 키 ID, 유효한 바인딩(각 리포지토리와 거기서 허용되는 정확한 액션), 부트스트랩 서비스 관리자인지 여부를 반환합니다. 클라이언트를 맞출 때 사용하며, 서버는 모든 요청을 여전히 검사하므로 권한 변경은 즉시 적용됩니다.

응답 200

필드형식필수규칙
idstring예—
profilestring예legacy, managed 중 하나
bindingsobject 배열예요소 10000개 이하
bindings[].resourceobject예—
bindings[].resource.kindstring예repository 중 하나
bindings[].resource.idstring예^[a-z0-9][a-z0-9_-]{0,63}$ 패턴과 일치
bindings[].actionsstring 배열예요소 1–24개; 중복 항목 없음; 각 요소: repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read 중 하나
serviceAdministrationboolean예—
credentialIdstring (uuid)아니요null일 수 있음

응답: 200, 400, 401, 403, 404, 409, 422, 503, 507

예제

bash
curl -X GET "$ARKVORY_URL/api/v1/auth/permissions" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Arkvory · ProAnimaStudio