第9章 ID および承認の管理
このセクションでは、Red Hat CodeReady Workspaces の ID および認証の管理についての各種の側面について説明します。
9.1. ユーザーの認証
以下では、CodeReady Workspaces サーバー上とワークスペース内の両方で、Red Hat CodeReady Workspaces のユーザー認証のすべての側面について説明します。これには、すべての REST API エンドポイント、WebSocket または JSON RPC 接続、一部の Web リソースのセキュリティーを保護することが含まれます。
すべての認証タイプは、JWT オープン標準を、ユーザー ID 情報を転送するコンテナーとして使用します。さらに、CodeReady Workspaces サーバー認証は、RH-SSO によってデフォルトで提供される OpenID Connect プロトコル実装に基づいて行われます。
ワークスペースでの認証は、自己署名されたワークごとの JWT トークンの発行と、JWTProxy に基づく専用サービスでの検証について示唆します。
9.1.1. CodeReady Workspaces サーバーに対する認証
9.1.1.1. 他の認証の実装を使用した CodeReady Workspaces サーバーに対する認証
この手順では、RH-SSO 以外の OpenID Connect (OIDC) 認証の実装を使用する方法について説明します。
手順
-
multiuser.properties
ファイルに保存されている認証設定パラメーターを更新します (例: クライアント ID、認証 URL、レルム名)。 -
単一のフィルターまたはフィルターチェーンを作成してトークンを検証し、CodeReady Workspaces ダッシュボードでユーザーを作成し、
subject
オブジェクトを作成します。 - 新規の認証プロバイダーが OpenID プロトコルをサポートする場合、設定エンドポイントで利用可能な OIDC JS クライアントライブラリーを使用してください。これは特定の実装から分離されるためです。
- 選択されたプロバイダーがユーザー (名前および姓、肩書き) についての追加データを保存する場合、この情報を提供するプロバイダーに固有の ProfileDao 実装を作成することが推奨されます。
9.1.1.2. OAuth を使用した CodeReady Workspaces サーバーに対する認証
サードパーティーサービスとのユーザーの対話を容易にするために、CodeReady Workspaces サーバーは OAuth 認証をサポートします。OAuth トークンは、GitHub 関連のプラグインにも使用されます。
OAuth 認証には、2 つの主要なフローがあります。
- delegated
- デフォルトです。OAuth 認証を RH-SSO サーバーに委譲します。
- embedded
- ビルトイン CodeReady Workspaces サーバーメカニズムを使用して OAuth プロバイダーと通信します。
2 つの実装間で切り替えるには、che.oauth.service_mode=<embedded|delegated>
設定プロパティーを使用します。
OAuth API の主な REST エンドポイントは /api/oauth
であり、以下が含まれます。
-
OAuth 認証フローを開始できる認証メソッドの
/authenticate
。 -
プロバイダーからのコールバックを処理するコールバックメソッドの
/callback
。 -
現行ユーザーの OAuth トークンを取得するためのトークン GET メソッドの
/token
。 -
現行ユーザーの OAuth トークンを無効にするためのトークン DELETE メソッドの
/token
。 -
設定済みのアイデンティティープロバイダーの一覧を取得する GET メソッドの
/
。
9.1.1.3. Swagger または REST クライアントを使用したクエリーの実行
ユーザーの RH-SSO トークンを使用して、REST クライアントでユーザーの代わりにセキュアな API に対してクエリーを実行します。有効なトークンは、Request ヘッダーまたは ?token=$token
クエリーパラメーターとして割り当てる必要があります。
CodeReady Workspaces Swagger インターフェース \https://codeready-<openshift_deployment_name>.<domain_name>/swagger
にアクセスします。アクセストークンが Request ヘッダーに含まれるように、ユーザーは RH-SSO で署名する必要があります。
9.1.2. CodeReady Workspaces ワークスペースでの認証
ワークスペースコンテナーには、認証で保護される必要のあるサービスが含まれる場合があります。このように保護されるサービスは、セキュア なサービスと呼ばれます。これらのサービスのセキュリティーを保護するには、マシンの認証メカニズムを使用します。
JWT トークンを使用すると、RH-SSO トークンをワークスペースコンテナーに渡す必要がなくなります(セキュアではなくなる可能性があります)。また、RH-SSO トークンの有効期間は比較的短く、定期的な更新またはリフレッシュが必要になる場合があります。このため、クライアントの同じユーザーセッショントークンを管理し、これらとの同期を維持するのは容易ではありません。
図9.1 ワークスペース内の認証
9.1.2.1. セキュアなサーバーの作成
CodeReady Workspaces ワークスペースでセキュアなサーバーを作成するには、devfile の dockerimage
タイプコンポーネントで、エンドポイントの secure
属性を true
に設定します。
セキュアなサーバーの devfile スニペット
components: - type: dockerimage endpoints: - attributes: secure: 'true'
9.1.2.2. ワークスペース JWT トークン
ワークスペーストークンは、要求に以下の情報が含まれる JSON Web トークン (JWT) です。
-
uid
: このトークンを所有するユーザーの ID -
uname
: このトークンを所有するユーザーの名前 -
wsid
: このトークンでクエリーできるワークスペースの ID
すべてのユーザーには、各ワークスペースに固有の個人用トークンが提供されます。トークンと署名の構造は、RH-SSO の場合とは異なります。以下は、トークンビューの例です。
# Header { "alg": "RS512", "kind": "machine_token" } # Payload { "wsid": "workspacekrh99xjenek3h571", "uid": "b07e3a58-ed50-4a6e-be17-fcf49ff8b242", "uname": "john", "jti": "06c73349-2242-45f8-a94c-722e081bb6fd" } # Signature { "value": "RSASHA256(base64UrlEncode(header) + . + base64UrlEncode(payload))" }
RSA アルゴリズムを使用した SHA-256 暗号は、JWT トークンの署名に使用されます。これは設定不可です。また、トークンの署名に使用されるキーペアの公開部分を配布するパブリックサービスはありません。
9.1.2.3. マシントークンの検証
マシントークン (JWT トークン) の検証は、別の Pod で実行される JWTProxy
と共に専用の per-workspace サービスを使用して実行されます。ワークスペースが起動すると、このサービスは CodeReady Workspaces サーバーから SHA キーの公開部分を受信します。セキュアなサーバーごとに個別の検証エンドポイントが作成されます。トラフィックがそのエンドポイントに到達すると、JWTProxy
は cookie またはヘッダーからトークンを抽出し、公開鍵の部分を使用して検証します。
CodeReady Workspaces サーバーをクエリーするには、ワークスペースサーバーは CHE_MACHINE_TOKEN
環境変数で提供されるマシントークンを使用できます。このトークンは、ワークスペースを起動するユーザーのトークンです。このような要求の範囲は、現在のワークスペースにのみ制限されます。許可される操作の一覧も厳密に制限されます。