アプリユーザー認証
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
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | Auth のステータス | AuthStatus |
| 403 | — | — |
| 404 | — | — |
| 503 | no_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.db や env.storage と同様、再デプロイは不要です。テーブルの初期化は冪等なので、2 回有効化しても実行は 1 回だけです。
リクエストボディはありません。設定はデフォルト値(AuthSettings のデフォルト)から始まり、変更は PATCH で行います。
member 以上。auth.grant として記録されます。
operationId grantAuth
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 付与ステータス(既に存在していた場合は既存の値) | AuthStatus |
| 403 | — | — |
| 404 | — | — |
| 409 | database_required — このプロジェクトにはデータベースがありません。runlot.json で "database": true を設定してデプロイしてください。 | Error |
| 503 | no_core | Error |
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 | — | — |
| 404 | not_granted — このプロジェクトには auth がありません。プロジェクト自体が存在しない場合は、このコードではなく not_found になります。 | Error |
| 503 | no_core | Error |
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 | — | — |
| 503 | no_core | Error |
PUT /v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}
プロジェクトは自身の OAuth アプリを登録します。 同意画面・審査・プライバシーはすべてアプリの所有者が持つため、共有のプラットフォームアプリはありません(docs/auth.md §12)。
プロバイダーに登録するコールバック URL はホストごとです: https://<host>/__runlot/auth/callback/<provider>。ホストの一覧は AuthStatus.hosts にあります。
clientSecret は project_secrets と同じ DEK・同じ AAD で封印され(予約プレフィックス auth/<provider> で命名)、以後どのレスポンスにも一切表示されません。 ローテーションは同じ PUT を使います — 冪等なので、リトライも安全です。
admin 以上が必要です — これは認証情報です。auth.provider.set として記録されます(シークレットは記録されません)。
operationId setAuthProvider
リクエストボディ: application/json · AuthProviderPut
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 変更されたステータス | AuthStatus |
| 400 | invalid_provider — 名前が github・google・kakao のいずれでもない、または clientId/clientSecret が空です。 | Error |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}
そのログインプロバイダーだけを使っていた人は、ログインできなくなります。 ユーザーレコードは残り、identities の該当エントリだけが削除されます。再度登録すれば、同じアカウントでログインできるようになります。
存在しないログインプロバイダーを削除しようとした場合も 204 を返します。
admin 以上です。auth.provider.delete を記録します。
operationId deleteAuthProvider
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 204 | 切断済み | — |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |