Hello
I am trying to configure Unreal Horde 5.8.0 with Google as the OIDC provider, including authentication for Unreal Build Accelerator (UBA).
I created a “Desktop App” OAuth client in Google Cloud. According to Google’s OAuth documentation, Desktop applications are public clients. The client has both a Client ID and a Client Secret available in the Google UI.
With the following Horde configuration, browser authentication works correctly:
"AuthMethod": "OpenIdConnect",
"OidcAuthority": "https://accounts.google.com",
"OidcClientId": "my-client-id",
"OidcAudience": "my-client-id",
"OidcClientSecret": "my-client-secret",
"AdminClaimType": "http://epicgames.com/ue/horde/user",
"AdminClaimValue": "my-email"
The AdminClaimType / AdminClaimValue configuration is only temporary and is not related to the authentication problem. It is only used to give my test account administrator permissions.
After logging into Horde through the browser, I can access the Horde web interface and see agents and other Horde functionality.
However, when attempting to use distributed compilation with UBA, i see this error in the cmd with horde server running:
[13:58:26 wrn] OIDC config mismatch: Command-line auth requires a public OAuth/OIDC client, but a confidential client is configured (OidcClientSecret is set). This will prevent Horde's C# client from signing in and block usage of Unreal Build Accelerator. To fix: Configure your OAuth/OIDC client as public (SPA/mobile/desktop) and remove the client secret
Following this warning, I removed OidcClientSecret from server.json.
After doing so, browser authentication no longer works. Google returns:
invalid_request
error_description: client_secret is missing
Horde logs:
Unhandled exception for POST /signin-oidc: An error was encountered while handling the remote login.
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException:
Message contains error: 'invalid_request', error_description: 'client_secret is missing.', error_uri: 'error_uri is null'.
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.RedeemAuthorizationCodeAsync(OpenIdConnectMessage tokenEndpointRequest)
at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleRemoteAuthenticateAsync()
Therefore, I currently have two mutually exclusive states:
With OidcClientSecret:
- Horde browser authentication works.
- UBA client authentication is rejected because Horde considers the OIDC client confidential.
Without OidcClientSecret:
- Horde browser authentication fails because Google’s token endpoint returns “client_secret is missing”.
- UBA also does not work.
I also found the following discussions on Google’s developer forums that appear to describe similar behavior with Desktop App clients and authorization-code flow without a client secret:
https://discuss.google.dev/t/authorization-code-flow-without-client-secret/168113/7
So generally i have few questions:
Is there a tested and supported way to configure Google OIDC with Horde so that both browser authentication and UBA client authentication work?
If yes, what is the correct Horde/Google configuration for this setup, particularly regarding the OAuth client type and OidcClientSecret?
Also, should OidcAudience be set to the Google OAuth Client ID in this configuration?
Please let me know if any additional details are required.
Thank you in advance,
Uladzislau
[Attachment Removed]