Horde Serverの認証が有効になっている状態で、Jenkinsの自動ビルドでUBAを利用する際の非インタラクティブな認証方法が欲しい

お世話になっております。

<br/>

他でも同じ内容でご回答いただいておりますが、機能リクエストおよびフィードバックとして投稿させていただきます。

他投稿 : Horde - unable to create session in service account - #16 by anonymous-edc

<br/>

上記投稿では「インタラクティブな認証方法」が途中で回答されていますが、「非インタラクティブな認証方法」であることを強く強調させていただきます。

<br/>

多くのゲームスタジオでは従来使用しているJenkins環境から一気にHordeに移すのではなく、動作確認をしながら段階的にHordeに移す形となるかと思います。

その上で、JenkinsでもUBAの恩恵を受けつつビルド高速化をしたいフェーズが入ってくるため、非インタラクティブな認証方法が欲しくなる、といった流れとなります。

<br/>

現状認証方法としては以下がある認識ですが、サービスアカウントを用いた非インタラクティブな認証方法は非常に使いづらいものとなっています。

<br/>

- インタラクティブな認証方法

- BuildConfigration, UBT引数, Engine.ini, 環境変数のToken(or UBAToken)

- サービスアカウントを用いた非インタラクティブな認証方法

<br/>

使いづらい原因としては、

1. サービスアカウントの認証ではヘッダーが以下の状態になっていることを期待している

> Authorization : ServiceAccount <token>

Engine\Source\Programs\Horde\HordeServer\Authentication\ServiceAccountAuthHandler.cs

<br/>

2. iniファイルやConfigrationなどで設定するTokenは以下形式で送信されてしまうこと

> Authorization : Bearer <token>

Engine\Source\Programs\Shared\EpicGames.Horde\HordeClient.cs

<br/>

その為、表題の問題を解決しようとした場合

- インタラクティブな認証方法を用いつつ、jwtExpiryTimeHoursを限りなく長くする

- 設定値からBearerかServiceAccountかを決められるように、ソースコードを改変する

のどちらかになる認識ですが、あっておりますか?

<br/>

jwtExpiryTimeHoursが手っ取り早いですが、全てのJenkins Agentで一度インタラクティブな認証をする必要があるのは変わらないのと

本来jwtの有効期限は開発現場が許す範囲で短く設定すべきとだと思っています。

<br/>

以上、よろしくお願いいたします。

[Attachment Removed]

簡単にコードを確認しましたが、ご認識のとおりだと思います。

現状では、サービスアカウント用の認証ハンドラは Authorization: ServiceAccount というヘッダーを前提としています。一方で、クライアントライブラリ(UBA を含む)は常に Authorization: Bearer という形式でトークンを送信しています。

そのため、現時点ではこれらは互いに排他的な実装になっており、そのままでは併用できません。

対応策としては、以下のいずれかになる可能性があります。

クライアント側を修正し、ServiceAccount プレフィックス付きトークンを送信できるようにするサーバー側を修正し、サービスアカウントに対しても Bearer トークンを受け付けられるようにする。

ただし、どちらが望ましい設計かについては、Horde の認証周りを担当している方の意見を確認したいと考えています。

そのため、彼が来週戻り次第、この件を共有し、正式な推奨アプローチを確認した上で機能リクエストとして整理する予定です。

少々お待ちいただければと思います。

[Attachment Removed]

ご確認いただきありがとうございます!

また、機能リクエストの可能性があることについても嬉しいです。心待ちにしております。

[Attachment Removed]