
# keenauth login でサインイン

`keenauth login` は、ダッシュボードのアカウントでサインインするため、APIキーを作成しなくてもターミナルから環境を管理できます。CI ジョブやスクリプトでは、引き続き `KEENAUTH_API_KEY` に APIキーを設定して使用してください（[コマンドラインインターフェイス](/docs/cli) を参照）。

## コマンド

| コマンド | 内容 |
|---|---|
| `keenauth login` | デバイスフローでサインインします。CLI がアドレスとコードを表示するので、任意のデバイスでそのアドレスを開き、ダッシュボードにサインインしてコードを入力します。 |
| `keenauth login --web` | このコンピュータのブラウザでサインインします。CLI がサインインページを開き、結果を `http://127.0.0.1:<port>/callback`（または `http://[::1]:<port>/callback`）で受け取ります。リクエストは PKCE（S256）、`state`、`iss` パラメータで保護されます。 |
| `keenauth whoami` | サインインしているユーザー、組織、選択中の環境を表示します。 |
| `keenauth env use <environment_id>` | 以降のコマンドで管理する環境を選択します。コントロールプレーンは、その環境でダッシュボードのロールを持っているかを確認します。 |
| `keenauth env list` | コントロールプレーンから、操作可能な環境を一覧表示します。`env use` で選択中の環境には `*` が付きます。 |
| `keenauth logout` | サーバー上のセッションを取り消し、このコンピュータから削除します。 |

```sh
keenauth login
keenauth env use env_01j9z3c0000000000000000000
keenauth users list
```

`KEENAUTH_API_KEY` が設定されている場合は、それが常に優先されます。保存済みのセッションは、APIキーが設定されていない場合にのみ使用されます。

## 環境の一覧表示

`keenauth env list` は、サインインしたアカウントのうち、ダッシュボードのロールを持つ環境の一覧をコントロールプレーンに問い合わせます（`GET /v1/environments`、[CLI 用の環境一覧](/docs/api/control/environments/list) を参照）。セッションが必要で、ない場合は `keenauth login` の実行を求めるメッセージが表示されます。

| フラグ | 説明 |
|---|---|
| `--limit` | 1ページあたりの件数。1〜100（既定値は 20）。 |
| `--after` | 前のページに表示されたカーソル（`more results: --after <cursor>`）。 |
| `--all` | ページをたどって、すべての環境を一覧表示します。 |
| `-o table\|json\|yaml` | 出力形式。表形式では選択中の環境に `*` が付き、JSON と YAML では該当する各行に `current: true` が付きます。 |

無効または他の一覧から得た `--after` カーソルは拒否されます（`invalid_cursor`）。そのカーソルを外して、コマンドを再実行してください。

## セッションの仕組み

- サインインすると、有効期間の短いアクセストークン（5分）と、リフレッシュトークン（12時間）が発行されます。どちらもこのコンピュータで作成された DPoP キー（RFC 9449）に紐付けられるため、コピーしたトークンを別のマシンから使用することはできません。リフレッシュトークンは使用するたびにローテーションされます。
- 各コマンドの実行時、CLI は選択中の環境の管理トークンをコントロールプレーンに要求します。このトークンの有効期間は 10 分で、同じ DPoP キーに紐付けられ、**メモリ上にのみ**保持されます。ディスクに書き込まれることはありません。
- 環境へのリクエストには、管理トークン、新しい DPoP 証明、およびダッシュボードの ID が含まれます。環境は、そのユーザーがまだロールを持っているかを確認するため、ダッシュボードのロールを削除すると、数分以内に CLI からのアクセスが終了します。

## セッションの保存先

| 保存内容 | 保存先 |
|---|---|
| 発行元、ユーザー ID、組織、DPoP キーのサムプリント、選択中の環境 | `KEENAUTH_CONFIG_DIR` 内の `config.json`、またはユーザー設定ディレクトリ配下の `keenauth`（モード 0600） |
| リフレッシュトークンと DPoP 秘密鍵 | OS のキーチェーン：macOS のキーチェーン（`security`）または Linux の Secret Service（`secret-tool`） |

秘密情報はキーチェーンツールに標準入力で渡され、コマンド引数として渡されることはありません。キーチェーンが利用できない場合（Windows や、Secret Service のない Linux サーバーなど）、`keenauth login` はエラーで停止します。その場合は `--insecure-storage` を指定すると、リフレッシュトークンと DPoP 秘密鍵を、`config.json` と同じ場所にある `credentials.json`（モード 0600）に暗号化せずに保存できます。CLI は警告を表示します。このファイルを読み取れる人は、セッションの有効期限が切れるまであなたになりすますことができます。共有マシンでは APIキーの使用を推奨します。

## 設定

| 変数 | 既定値 | 説明 |
|---|---|---|
| `KEENAUTH_LOGIN_ISSUER` | `https://login.keenauth.com` | サインインサーバー。`https` アドレスである必要があります。 |
| `KEENAUTH_CONTROL_URL` | `https://api.keenauth.com/v1` | 管理トークンを発行するコントロールプレーン。`https` アドレスである必要があります。 |
| `KEENAUTH_CONFIG_DIR` | ユーザー設定ディレクトリ + `keenauth` | `config.json`（`--insecure-storage` 指定時は `credentials.json` も）を保存する場所。 |

## エラー

| メッセージ | 対処方法 |
|---|---|
| `you are not signed in` / `your session has expired or was revoked` | `keenauth login` を再度実行してください。終了コード 3。 |
| `no environment is selected` | `keenauth env use <environment_id>` を実行してください。 |
| `environment … does not exist or you have no dashboard role in it` | ダッシュボードで ID を確認するか、オーナーにロールの付与を依頼してください。 |
| `no OS keychain is available` | キーチェーンをインストールするか、`--insecure-storage` を使用するか、APIキーを使用してください。 |
