change audience for self service services

This commit is contained in:
Max Peintner
2025-01-17 10:21:11 +01:00
parent fc7045aeb2
commit d9ba427b6a
3 changed files with 47 additions and 18 deletions

View File

@@ -4,10 +4,10 @@ import { getInstanceByHost } from "./zitadel";
export async function getInstanceUrl(host: string): Promise<string> { export async function getInstanceUrl(host: string): Promise<string> {
const [hostname, port] = host.split(":"); const [hostname, port] = host.split(":");
if (hostname === "localhost") { // if (hostname === "localhost") {
console.log("fallback to ZITADEL_API_URL"); // console.log("fallback to ZITADEL_API_URL");
return process.env.ZITADEL_API_URL || ""; // return process.env.ZITADEL_API_URL || "";
} // }
const instance = await getInstanceByHost(host).catch((error) => { const instance = await getInstanceByHost(host).catch((error) => {
console.error(`Could not get instance by host ${host}`, error); console.error(`Could not get instance by host ${host}`, error);

View File

@@ -3,16 +3,30 @@
import { createServerTransport } from "@zitadel/client/node"; import { createServerTransport } from "@zitadel/client/node";
import { createUserServiceClient } from "@zitadel/client/v2"; import { createUserServiceClient } from "@zitadel/client/v2";
import { headers } from "next/headers"; import { headers } from "next/headers";
import { getInstanceUrl } from "./api";
import { getSessionCookieById } from "./cookies"; import { getSessionCookieById } from "./cookies";
import { getSession } from "./zitadel"; import { getSession } from "./zitadel";
const transport = (token: string) => const transport = async (host: string, token: string) => {
createServerTransport(token, { let instanceUrl;
baseUrl: process.env.ZITADEL_API_URL!, try {
}); instanceUrl = await getInstanceUrl(host);
} catch (error) {
console.error(
`Could not get instance url for ${host}, fallback to ZITADEL_API_URL`,
error,
);
instanceUrl = process.env.ZITADEL_API_URL;
}
const myUserService = (sessionToken: string) => { return createServerTransport(token, {
return createUserServiceClient(transport(sessionToken)); baseUrl: instanceUrl,
});
};
const myUserService = async (host: string, sessionToken: string) => {
const transportPromise = await transport(host, sessionToken);
return createUserServiceClient(transportPromise);
}; };
export async function setMyPassword({ export async function setMyPassword({
@@ -40,7 +54,7 @@ export async function setMyPassword({
return { error: "Could not load session" }; return { error: "Could not load session" };
} }
const service = await myUserService(`${sessionCookie.token}`); const service = await myUserService(host, `${sessionCookie.token}`);
if (!session?.factors?.user?.id) { if (!session?.factors?.user?.id) {
return { error: "No user id found in session" }; return { error: "No user id found in session" };

View File

@@ -28,6 +28,7 @@ import {
SetPasswordRequestSchema, SetPasswordRequestSchema,
} from "@zitadel/proto/zitadel/user/v2/user_service_pb"; } from "@zitadel/proto/zitadel/user/v2/user_service_pb";
import { headers } from "next/headers"; import { headers } from "next/headers";
import { getInstanceUrl } from "../api";
import { getNextUrl } from "../client"; import { getNextUrl } from "../client";
import { getSessionCookieById, getSessionCookieByLoginName } from "../cookies"; import { getSessionCookieById, getSessionCookieByLoginName } from "../cookies";
import { import {
@@ -346,15 +347,29 @@ export async function checkSessionAndSetPassword({
} }
}); });
} else { } else {
const myUserService = (sessionToken: string) => { const transport = async (host: string, token: string) => {
return createUserServiceClient( let instanceUrl;
createServerTransport(sessionToken, { try {
baseUrl: process.env.ZITADEL_API_URL!, instanceUrl = await getInstanceUrl(host);
}), } catch (error) {
); console.error(
`Could not get instance url for ${host}, fallback to ZITADEL_API_URL`,
error,
);
instanceUrl = process.env.ZITADEL_API_URL;
}
return createServerTransport(token, {
baseUrl: instanceUrl,
});
}; };
const selfService = await myUserService(`${sessionCookie.token}`); const myUserService = async (host: string, sessionToken: string) => {
const transportPromise = await transport(host, sessionToken);
return createUserServiceClient(transportPromise);
};
const selfService = await myUserService(host, `${sessionCookie.token}`);
return selfService return selfService
.setPassword( .setPassword(