runlot
참조API

앱의 최종 사용자 로그인

app-auth 묶음의 오퍼레이션 6 개입니다.

메서드경로하는 일
GET/v1/orgs/{orgSlug}/projects/{projectName}/auth최종 사용자 인증 상태 (runlot auth)
POST/v1/orgs/{orgSlug}/projects/{projectName}/auth인증을 켠다 (runlot auth create)
PATCH/v1/orgs/{orgSlug}/projects/{projectName}/auth설정을 바꾼다 (runlot auth set)
DELETE/v1/orgs/{orgSlug}/projects/{projectName}/auth인증을 해제한다 (runlot auth delete)
PUT/v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}소셜 프로바이더를 등록·교체한다 (runlot auth provider set)
DELETE/v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}프로바이더를 뗀다 (runlot auth provider rm)

GET /v1/orgs/{orgSlug}/projects/{projectName}/auth

부여 여부·설정·등록된 프로바이더·콜백을 걸 호스트 (docs/auth.md §9).

가입자 표는 여기 없다. 사람은 프로젝트의 Postgres 안 runlot_auth 스키마에 살고 (docs/auth.md §6), CP 는 그 표를 보지 않는다 — 지금 그것을 읽는 길은 워커의 env.auth.users.*runlot pg shell 이다.

providers 에는 client id 만 온다. 클라이언트 시크릿은 봉인돼 있고 어느 응답에도 나가지 않는다 (시크릿 표면의 규칙).

viewer 이상 — "이 앱에 로그인이 있는가" 는 조직의 누구나 알아야 하는 사실이다.

operationId getAuth

응답본문
200인증 상태AuthStatus
403
404
503no_core — cp-core 연결이 없다Error

POST /v1/orgs/{orgSlug}/projects/{projectName}/auth

멱등이다 — 두 번 불러도 설정과 프로바이더는 그대로다. 부여의 유일한 표현이 행의 존재라 (마이그레이션 0024) "켜졌지만 꺼져 있다" 는 상태는 없다.

데이터베이스가 있어야 한다. 없으면 409 database_required 다 — 가입자 표가 프로젝트 DB 안이라 (docs/auth.md §1) 부여만 세우면 워커가 뜨는 순간 표가 없다. runlot add pg auth 가 pg 를 먼저 부르는 이유가 이것이고, CLI 는 이 409 를 받으면 그 명령을 안내한다.

부여가 서면 노드가 다음 수렴에서 auth 시스템 워커를 소켓의 진입 서비스로 세운다 — 재배포는 필요 없다 (env.db·env.storage 와 같은 길). 표 부트스트랩은 멱등이라 두 번 켜도 한 번이다.

요청 본문이 없다. 설정은 기본값으로 서고 (AuthSettings 의 기본), 바꾸는 것은 PATCH 다.

member 이상. 감사 auth.grant.

operationId grantAuth

응답본문
200부여 상태 (이미 있었으면 기존 값)AuthStatus
403
404
409database_required — 이 프로젝트에 데이터베이스가 없다. runlot pg create 를 먼저 한다.Error
503no_coreError

PATCH /v1/orgs/{orgSlug}/projects/{projectName}/auth

부분 갱신이다. 준 칸만 바뀌고 나머지는 그대로다 — 화면이 스위치 하나를 누를 때마다 브랜드 셋을 같이 실어 보내면, 두 사람이 같은 카드를 만질 때 나중 저장이 앞 저장을 덮는다.

부여가 없으면 404 not_granted 다. 설정만 앞서 저장해 두는 자리는 없다 — 부여가 곧 행이고 설정은 그 행의 칸이다.

sessionDays 는 세션 표의 크기를 정하는 손잡이이기도 하다 (docs/auth.md §13 — 150 MB 상한 안에 든다).

member 이상. 감사 auth.settings.

operationId updateAuthSettings

본문 application/json · AuthSettingsPatch

응답본문
200바뀐 상태AuthStatus
400
403
404not_granted — 이 프로젝트에 인증이 없다. 프로젝트 자체가 없을 때도 같은 코드가 아니라 not_found 다.Error
503no_coreError

DELETE /v1/orgs/{orgSlug}/projects/{projectName}/auth

가입자는 지워지지 않는다. runlot_auth 의 표는 프로젝트 DB 안에 그대로 남는다 (docs/auth.md §9) — 데이터는 DB 의 것이고, 지우는 것은 runlot pg 의 일이다. 다시 켜면 같은 사람들이 그대로 로그인한다.

다음 수렴부터 auth 시스템 워커가 내려가고 /__runlot/auth/* 는 사용자 워커로 그대로 넘어간다 — 그 경로에 라우트가 없으면 404 다.

해제도 멱등이다: 없는 부여를 떼는 것도 204 다.

admin 이상 — 켜는 것은 member 지만 끄는 것은 로그인한 사람 전부를 내보내는 일이다. 감사 auth.revoke.

operationId revokeAuth

응답본문
204뗐다
403
404
503no_coreError

PUT /v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}

프로젝트가 자기 OAuth 앱을 등록한다. 플랫폼 공용 앱을 두지 않는 이유는 동의 화면·심사·프라이버시가 전부 그 앱 주인의 것이기 때문이다 (docs/auth.md §12).

프로바이더에 등록할 콜백 URL 은 호스트마다 https://<host>/__runlot/auth/callback/<provider> 다. 호스트 목록은 AuthStatus.hosts 에 있다.

clientSecretproject_secrets 와 같은 DEK·같은 AAD 로 봉인되고 (이름은 예약 접두 auth/<provider>), 어느 응답에도 다시 나오지 않는다. 교체는 같은 PUT 이다 — 멱등이라 재시도가 안전하다.

admin 이상 — 자격 증명이다. 감사 auth.provider.set (시크릿은 안 남는다).

operationId setAuthProvider

본문 application/json · AuthProviderPut

응답본문
200바뀐 상태AuthStatus
400invalid_providergithub·google·kakao 밖의 이름이거나 clientId·clientSecret 이 비었다.Error
403
404
503no_coreError

DELETE /v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}

그 프로바이더로만 가입한 사람은 로그인할 길을 잃는다 — 사용자 행은 남고 identities 의 그 줄만 없어진다. 다시 등록하면 같은 계정으로 돌아온다.

없는 프로바이더를 떼는 것도 204 다.

admin 이상. 감사 auth.provider.delete.

operationId deleteAuthProvider

응답본문
204뗐다
403
404
503no_coreError

이 페이지에서