- OpenTofuの内部構造
- サーバーサイドログインプロトコル
サーバーサイドログインプロトコル
tofu login
を使用するためにこれらのドキュメントを読む必要はありません。以下の情報は、サードパーティシステムでOpenTofuネイティブサービスを提供するために、tofu login
のサーバーサイドを実装しようとしている人向けです。
tofu login
コマンドは、ターゲットホストから提供された構成を使用してOAuth 2.0認証リクエストを実行することをサポートします。OpenTofuモジュールレジストリなどのOpenTofuネイティブサービスのサードパーティ実装を開発する場合は、このプロトコルを実装することをお勧めします。
まず、OpenTofuはリモートサービスディスカバリーを使用して、ホストのOAuth構成を見つけます。ホストはサービス名login.v1
をサポートし、OAuthクライアント構成値を含むオブジェクトを定義する必要があります。例:
{
"login.v1": {
"client": "tofu-cli",
"grant_types": ["authz_code"],
"authz": "/oauth/authorization",
"token": "/oauth/token",
"ports": [10000, 10010],
}
}
ディスカバリーオブジェクト内のプロパティは次のとおりです。
-
client
(必須): RFC 6749セクション2.2で定義されている、リクエストを行う際に使用するclient_id
の値。OpenTofuはパブリッククライアントであるため(エンドユーザーシステムにインストールされるため、OAuthクライアントシークレットを保護できません)、
client_id
は純粋にアドバイザリであり、サーバーは、認証リクエストがOpenTofuから実際に送信されているという保証として使用してはいけません。 -
grant_types
(オプション):サーバーがサポートできるOAuth 2.0グラントタイプのセットを記述する文字列のJSON配列。「グラントタイプ」は、OAuthサーバーがリクエストを認証し、認証トークンを発行する特定のメカニズムを選択します。OpenTofu CLIは単一のグラントタイプをサポートしています。
authz_code
: 認証コードグラント。authz_code
が存在する場合、authz
とtoken
の両方のプロパティが必要です。
指定しない場合、
grant_types
のデフォルトは["authz_code"]
です。 -
authz
(特定のグラントタイプに必要な場合必須):サーバーの認証エンドポイント。相対URLとして指定されている場合は、サービスディスカバリードキュメントの場所から解決されます。 -
token
(特定のグラントタイプに必要な場合必須):サーバーのトークンエンドポイント。相対URLとして指定されている場合は、サービスディスカバリードキュメントの場所から解決されます。 -
ports
(オプション):OpenTofuが、認証コードグラントの最初のステップのリダイレクトエンドポイントを提供するために開始する一時的なHTTPサーバーに使用できるTCPポートの包括的な範囲を提供する、2要素のJSON配列。OpenTofuは、サーバーの認証エンドポイントからの応答を受信するために、ループバックインターフェイス上のTCPリッスンポートを開きます。指定しない場合、OpenTofuは1024以上の任意のTCPポートを自由に選択できます。
OpenTofuでは、各
client_id
を固定された有効なリダイレクトエンドポイントURLのセットに関連付ける必要があるOAuthサーバー実装との相互運用性のために、このポート範囲を制約できます。https://:10000/
の形式のURLの範囲を異なる連続したポート番号で予期するようにそのようなサーバーを構成し、ports
を使用してそのポート範囲を指定します。可能な場合は、少なくとも10個の異なるポート番号を許可し、特定のシステムで可能なすべてのポートがすでに使用されているリスクを最小限に抑えるために、10000以上の番号を割り当てることをお勧めします。
認証コードグラントをリクエストする場合、OpenTofu CLIは、システムの他のアプリケーションがリダイレクトエンドポイントへの着信リクエストをインターセプトするのを防ぐために、Proof Key for Code Exchange拡張機能を実装します。この拡張機能を実装し、トークンエンドポイントに送信されたコードチャレンジを検証するOAuthサーバー実装を選択することを強くお勧めします。
OpenTofu CLIは、OAuthリフレッシュトークンまたはトークンの有効期限をサポートしていません。サーバーが時間制限付きのトークンを発行する場合、OpenTofu CLIは、トークンの期限が切れると認証エラーを受信し始めるだけで、その後ユーザーはtofu login
を再度実行して新しいトークンを取得できます。