runlot
リファレンスAPI

アプリユーザー認証

app-auth カテゴリの API 操作を 6 件カバーします。

メソッドパス説明
GET/v1/orgs/{orgSlug}/projects/{projectName}/authエンドユーザー認証の状態(runlot auth)
POST/v1/orgs/{orgSlug}/projects/{projectName}/auth認証を有効にします(runlot deploy"auth": true の宣言を読み取った後に呼び出します)
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)。

サブスクライバーテーブルはこの API の一部ではありません。 ユーザー情報はプロジェクトの Postgres の runlot_auth スキーマに保存され(docs/auth.md §6)、CP はこのテーブルを問い合わせません。現在のユーザー一覧は、ワーカーの env.auth.users.*runlot pg shell で確認できます。

providers にはクライアント id のみが含まれます。クライアントシークレットは封印され、レスポンスに一切表示されません(secret-surface ルール)。

viewer 以上 — このアプリにログイン機能があるかどうかは、org 内の誰もが知ることができるべき事実です。

operationId getAuth

ステータスコード説明レスポンスボディ
200Auth のステータスAuthStatus
403
404
503no_core — cp-core への接続がありませんError

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

これは冪等です — 2 回呼び出しても、設定とログインプロバイダーは変わりません。有効化の唯一の表現がレコードの存在であるため(migration 0024)、「オンだが無効」という状態は存在しません。

データベースが必要です。 ない場合、409 database_required が返されます。サブスクライバーテーブルはプロジェクト DB 内にあるため(docs/auth.md §1)、auth だけを有効化すると、ワーカーは起動時に必要なテーブルを持たない状態になります。そのため "auth": true を宣言すると、データベースも有効化され、デプロイはその順序で付与するため、そこでこの 409 が発生することはありません。

有効化すると、ノードは次の convergence でソケットのエントリーサービスとして auth システムワーカーを起動します。env.dbenv.storage と同様、再デプロイは不要です。テーブルの初期化は冪等なので、2 回有効化しても実行は 1 回だけです。

リクエストボディはありません。設定はデフォルト値(AuthSettings のデフォルト)から始まり、変更は PATCH で行います。

member 以上。auth.grant として記録されます。

operationId grantAuth

ステータスコード説明レスポンスボディ
200付与ステータス(既に存在していた場合は既存の値)AuthStatus
403
404
409database_required — このプロジェクトにはデータベースがありません。runlot.json で "database": true を設定してデプロイしてください。Error
503no_coreError

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

部分更新です。 送信したフィールドだけが変更され、残りはそのままです。UI が 1 つのスイッチを変更するたびにブランド設定の 3 つすべてを送信していると、2 人のユーザーが同じ設定を編集した場合、後の保存が前の保存を上書きすることがあります。

利用設定が存在しない場合は 404 not_granted を返します。設定値は利用設定のレコードと一緒に保存されるため、設定だけを事前に保存することはできません。

sessionDays はセッションテーブルのサイズも決定する設定です(docs/auth.md §13 — 150 MB の上限内に収まります)。

member 以上が必要です。auth.settings として記録されます。

operationId updateAuthSettings

リクエストボディ: application/json · AuthSettingsPatch

ステータスコード説明レスポンスボディ
200変更されたステータスAuthStatus
400
403
404not_granted — このプロジェクトには auth がありません。プロジェクト自体が存在しない場合は、このコードではなく not_found になります。Error
503no_coreError

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

サブスクライバーデータは削除されません。 runlot_auth テーブルはプロジェクト DB にそのまま残ります(docs/auth.md §9) — データは DB に属し、削除するのは runlot pg の仕事です。再度有効化すれば、同じ人が以前と同じようにログインできます。

次の convergence から、auth システムワーカーは停止し、/__runlot/auth/* はそのままユーザーワーカーに通過します — そのパスにルートがなければ 404 になります。

無効化も冪等です。auth が有効化されていなかった場合でも 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_provider — 名前が githubgooglekakao のいずれでもない、または 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

このページの目次