UE5.6: OidcToken.exe が Client Credentials フローで常に NotLoggedIn となり、Cloud DDC に接続できない

Unreal Engine 5.6 を使用しています。

最終的に実現したいのは、Unreal Editor から Cloud DDC に接続し、ビルドキャッシュを利用できるようにすることです。

Okta を IdP として Client Credentials による認証を構成しました。

しかし、現在は Editor 起動時も OidcToken.exe 単体実行時もログインに失敗し、Cloud DDC が利用できません。

  • 質問

    • UE5.6 において、OidcToken.exeClient Credentials フローを利用するために必要な設定が知りたいです。以下に、現在の環境情報などを記載しますが、不足している設定などがあれば教えて下さい。
    • CloudDDCを利用するための具体的なサンプル設定などが公式にあれば、参考のため教えていただきたいです。
  • 環境情報など

    • UE5.6
    • Okta を認証サーバーとして利用。カスタム Authorization Server を作成済み。
    • スコープ ddc.access を作成し、Access Policy にて Client Credentials を許可済み
    • curl で次のコマンドが成功することを確認済み: curl -u "<ClientId>:<ClientSecret>" -d "grant_type=client_credentials&scope=ddc.access" "https://<okta-tenant>/oauth2/<auth-server-id>/v1/token"
  • OIDC設定

Programs/OidcToken/oidc-configuration.json に以下の内容を記載しています。

{
  "OidcToken": {
    "Providers": {
      "okta": {
        "Identifier": "okta",
        "DisplayName": "Okta",
        "ServerUri": "https://<okta-tenant>/oauth2/<auth-server-id>",
        "TokenEndpoint": "https://<okta-tenant>/oauth2/<auth-server-id>/v1/token",
        "ClientId": "<ClientId>",
        "ClientSecret": "<ClientSecret>",
        "Scopes": ["ddc.access"]
      }
    }
  }
}

  • ログ

Unreal Editor 起動時

LogDesktopPlatform: Display: Launching OidcToken... [OidcToken.exe --Service="okta-headless" ... --Unattended=true]
LogDesktopPlatform: Warning: Failed to run OidcToken (...). No result file found, closed with exit code: 1
LogDerivedDataCache: Warning: Cloud: OidcToken: Failed to log in to HTTP services.
LogDerivedDataCache: Warning: Cloud: Failed to contact the service (...), will not use it.
LogDerivedDataCache: Unable to find inner node Cloud for hierarchy Hierarchy.

OidcToken.exe 単体実行

[INF] Determined status of provider okta was NotLoggedIn
[INF] Fetching access token from provider okta
[WRN] Not logged in to provider okta but was running unattended so unable to login
[WRN] Was unable to allocate a token

再現手順

  • 準備​
    • OktaなどのIdPサービスで、OIDC認証を行えるように設定を行います
      • カスタム認可サーバーの作成や、スコープの許可など
    • oidc-configuration.jsonとDefaultEngine.iniのそれぞれに、OIDC認証で使用するクライアントIDやスコープなどの情報を、IdPサービス側の設定に合わせて​記述します
  • ​再現1: UnrealEditorの起動
    • UnrealEditorを起動してプロジェクトを読み込みます。
    • UnrealEditor自体は起動しますが、ログを見ると以下の様にOidcToken.exeの実行失敗が記録されていて、OIDC認証が通りません
​`Failed to run OidcToken (...). No result file found, closed with exit code: 1

  • ​再現2: OidcToken.exeの直接実行
    • コマンド例
​C:\work\Engine\Binaries\DotNET\OidcToken\win-x64\OidcToken.exe `
 --Service="okta" `
 --Project="C:\work\Games\Sample\Sample.uproject" `
 --OutFile="C:\work\Games\Sample\Intermediate\oidcTokenTest.json" `

  • ​以下のようなメッセージが表示され、期待する動作(「OutFile」で指定したパスにOIDC認証のトークンが出力される)になりません。
[INF] Determined status of provider okta was NotLoggedIn
[INF] Fetching access token from provider okta
[WRN] Not logged in to provider okta but was running unattended so unable to login
[WRN] Was unable to allocate a token

(下記のリンク先は、本スレッドを英語に翻訳した英文スレッドですが、Epic Games のサポートチームが内部的に使用するものですので、ユーザーの方に利用していただく必要はございません。サポートは、この日本語スレッドに日本語で表示されるようになります。)

[OidcToken.exe always shows NotLoggedIn with the Client Credentials flow, failing to connect to the Cloud [Content removed]

[mention removed] 様

(以下は、サポート担当の Lindvist Joakim によるコメントを翻訳したものです。)

残念ながら、OidcToken.exe は Client Credentials フローの利用を想定しておりません。インタラクティブなユーザーフロー (特に Authorization Code フロー) 向けのものなのです。

Client Credentials フローを利用する場合は、通常は Horde に認証情報を組み込みます。Horde のプロジェクト定義の tokens というセクションをご覧になってください。

実際的に Horde は、あなたが curl で行ったのと同じリクエストを実行し、生成されたアクセス トークンを環境変数 (UE-CloudDataCacheAccessToken) に保存し、それによりトークンをエディタに渡します。

このようにしているのは、クライアント シークレットを、Horde やご利用の CI システム内に秘匿しておき、oidc-configuration.json に含めずに済むようにするためです。

[mention removed]

レスポンスが遅くなってしまい、大変失礼いたしました。

Client Credentialsフローを利用するには、Hordeへ認証情報を組み込んで利用する必要があるとのこと、承知いたしました。

ご回答いただきまして、ありがとうございました。

ご返信いただきまして、ありがとうございました。

これで一旦クローズとさせていただきます。