diff --git a/apps/login/next-env-vars.d.ts b/apps/login/next-env-vars.d.ts index b575dc91f4..112eea393f 100644 --- a/apps/login/next-env-vars.d.ts +++ b/apps/login/next-env-vars.d.ts @@ -14,6 +14,14 @@ declare namespace NodeJS { */ ZITADEL_API_URL: string; + /** + * Takes effect only if ZITADEL_API_URL is not empty. + * This is only relevant if Zitadels runtime has the ZITADEL_INSTANCEHOSTHEADERS config changed. + * The default is x-zitadel-instance-host. + * Most users don't need to set this variable. + */ + ZITADEL_INSTANCE_HOST_HEADER: string; + /** * Self hosting: The service user id */ diff --git a/apps/login/src/lib/service.ts b/apps/login/src/lib/service.ts index 5ea9eec882..48a31c1ac6 100644 --- a/apps/login/src/lib/service.ts +++ b/apps/login/src/lib/service.ts @@ -42,8 +42,26 @@ export async function createServiceForHost( throw new Error("No token found"); } + const instanceHost = new URL(serviceUrl).host; const transport = createServerTransport(token, { - baseUrl: serviceUrl, + baseUrl: process.env.ZITADEL_API_URL ?? serviceUrl, + interceptors: + (process.env.ZITADEL_API_URL && + process.env.ZITADEL_API_URL != serviceUrl) || + process.env.ZITADEL_INSTANCE_HOST_HEADER + ? [ + (next) => { + return (req) => { + req.header.set( + process.env.ZITADEL_INSTANCE_HOST_HEADER ?? + "x-zitadel-instance-host", + instanceHost, + ); + return next(req); + }; + }, + ] + : undefined, }); return createClientFor(service)(transport);