Skip to main content
このドキュメントはDevinの連邦政府向け導入環境を対象としています。Devinドキュメントに戻る
デフォルトでは、エアギャップ化されたbuildへのアクセスはライセンスファイルのみによって制御されます。これに加えて、各ユーザーに自社のOIDCアイデンティティプロバイダーへのサインインを必須にすることもできます。SSO (シングルサインオン) はライセンスに上乗せする形で適用されます。ライセンスは引き続き必須であり、ログインフローは設定した発行者に対して実行されます。

認証ファイルを作成する

このファイルでは、モードを 1 つだけ指定します。ファイルが存在しない場合、製品は "mode": "license" が指定されているものとして動作します。
/etc/devin/auth.json
不明なフィールドはエラーになります。license モードで指定できるのは schema_version と mode のみです。
IdP がプライベート CA によって発行された証明書を使用している場合は、CLI がその証明書を信頼するよう、DEVIN_CA_BUNDLE に PEM バンドルを指定してください。詳しくは ネットワークと証明書 を参照してください。

IdP にクライアントを登録する

CLI は OIDC の PKCE (S256) を用いた認可コードフローを公開クライアントとして実行するため、クライアントシークレットは使用しません。登録するクライアントは、次の要件を満たす必要があります。
  1. client_id に指定した ID(例: devin-cli)を持つ公開クライアント(クライアントシークレットなし)であり、認可コードグラントが有効化され、PKCE メソッドが S256 に設定されていること。
  2. http://127.0.0.1/callback が有効なリダイレクト URI として登録されていること。CLI は、ブラウザフローではランダムなループバックポート(http://127.0.0.1:<port>/callback)で待ち受け、手動フローでは固定の http://127.0.0.1/callback を利用します。RFC 8252 では IdP はループバックポートを無視すべきとされていますが、お使いの IdP が無視しない場合は、これにマッチするワイルドカードを登録してください。
  3. required_group を利用する場合は、groups_claim で指定したグループメンバーシップのクレーム(デフォルトは groups)が ID トークンに含まれていること。
  4. IdP がリフレッシュ時に ID トークンを返し(openid スコープが付与されていれば、ほとんどの IdP が返します)、かつこのクライアントの ID トークンの有効期間が短く設定されていること。その理由については、失効の伝播の仕組みを参照してください。

サインイン

ワークステーションのターミナルからログインします:
ヘッドレスホスト上や SSH 経由で作業している場合は、手動フローを利用してください。CLI に URL が表示されるので、任意のマシンのブラウザでその URL を開きます。サインインすると、ブラウザは 127.0.0.1 の URL にリダイレクトされますが、このページは読み込まれません。その URL 全体 (クエリパラメーターを含む) をコピーし、ターミナルに貼り付けてください。
Devin Desktop は、同梱のエージェントを通じて同じログイン情報を利用します。サインインしていないユーザーには、作業を開始する前に Devin の設定でサインインするよう求めるメッセージが表示されます。

ステータスの確認とサインアウト

キャッシュされたログイン情報が存在しない場合や更新できなくなった場合は、Status: not logged in (<reason>) と出力され、続けて Run \devin auth login` to sign in.` と表示されます。
ログアウトはローカルでのみ処理されます。トークンキャッシュを削除するだけで、IdP への通信は発生しません。

CLI が検証する内容

ID トークンはローカルで検証されます。検証対象は、IdP の JWKS による署名、iss、aud、有効期限 (120 秒までのクロックスキューを許容) 、ログイン時の nonce、およびグループによるアクセス制限です。ID トークンとリフレッシュトークンは、所有者のみがアクセスできる権限 (0600) でローカルの認証情報ストアにキャッシュされ、IdP を通じてバックグラウンドで自動的に更新されます。 SSO (シングルサインオン) が設定済みで、有効なログインが存在しない場合 (かつバックグラウンドでの更新にも失敗した場合) 、CLI は起動時にエラーを表示して終了し、devin auth login を実行するようユーザーに促します。 CLI は IdP からの HTTP リダイレクトには従いません。検出、JWKS、トークンのいずれかのエンドポイントから 3xx が返された場合、ログインは失敗し、該当するエンドポイント名を含むエラーが表示されます。そのため、issuer には IdP が実際に応答する URL を指定する必要があります。

検出されたエンドポイントは発行者と同じオリジンである必要がある

検出によって取得した authorization_endpoint、token_endpoint、jwks_uri は、issuer とスキーム、ホスト、ポートが同じである必要があります (デフォルトポートは同一とみなされます) 。それ以外のホスト上のエンドポイントは拒否され、ログインは次のようなエラーで失敗します:
IdP の構成によっては、複数のホストからエンドポイントを提供するのが正当な場合もあります。オンプレミスでよくある例は hostname-backchannel-dynamic=true を設定した Keycloak です。この場合、token_endpoint と jwks_uri は、CLI が接続に使用した内部ホスト名に書き換えられます。追加のホストが意図したものであることを IdP 自体の設定で確認できた場合に限り、そのホストを追加してください。
項目は host (任意のポート) または host:port の形式で指定し、大文字と小文字を区別せずに照合されます。ワイルドカードは使用できず、このチェックを無効にする方法もありません。許可リストによって TLS の要件が緩和されることはありません。発行者が https:// の場合、http:// のエンドポイントは許可リストに含めても拒否されます。ログインエラーにホスト名が表示されたからといって、そのホストを追加しないでください。そのエラーは、チェックが正しく機能している証拠です。

失効が反映される仕組み

グループによるアクセス制限は、キャッシュされた ID トークンに基づいて評価されます。そのため、IdP 側でユーザーを required_group から削除した場合 (またはユーザーを無効化した場合) 、その変更は次回のトークン更新時に反映されます。反映が最も遅くなるのは、現在の ID トークンの有効期限が切れてから、さらに 120 秒のクロックスキュー許容時間が経過した時点です。失効を迅速に反映させる必要がある場合は、このクライアントの ID トークンの有効期間を短く設定してください。 リフレッシュのレスポンスに新しい ID トークンが含まれていない場合は、キャッシュされた ID トークンが引き続き利用されます。ただし、利用できるのはそのトークンの exp から最大 24 時間までです。それ以降は、IdP がリフレッシュトークンを引き続き受け付けている場合でも、ユーザーは再度サインインする必要があります。

実行中のセッションにおける再検証

Devin Desktop (またはバンドルされたエージェントを利用するその他のクライアント) の実行中、エージェントは 60 秒ごとにログイン状態を再チェックし、少なくとも 15 分に 1 回は IdP に対してトークンを強制的に更新します。チェックに失敗すると、エージェントは IDP コード付きの sso_revalidation_failed 監査イベントを記録し、新しい作業の受け付けを停止してシャットダウンします。この場合、ユーザーは再度サインインしてから再起動する必要があります。

監査対象

SSO (シングルサインオン) のアクティビティは、auth イベントとしてローカルの監査ログに記録されます。検証済みのトークンを参照できるイベントでは、すべて actor に SSO アイデンティティ (sso_issuer、sso_subject、sso_user、sso_groups) が含まれます。

IDP エラーコード

エラーコードの一覧は エラーコード ページをご覧ください。