1
0
forked from baron/baron-sso

callback 검증 보강. seed-tenant 추가보강

This commit is contained in:
2026-05-11 11:03:11 +09:00
parent f46a7cc088
commit 9a64a16cb9
28 changed files with 2832 additions and 133 deletions

View File

@@ -1,14 +1,24 @@
import { UserManager, WebStorageStateStore } from "oidc-client-ts";
import type { AuthProviderProps } from "react-oidc-context";
import {
buildAdminAuthRedirectUris,
resolveAdminPublicOrigin,
} from "./authConfig";
const adminPublicOrigin = resolveAdminPublicOrigin(
import.meta.env.VITE_ADMIN_PUBLIC_URL,
window.location.origin,
);
const adminRedirectUris = buildAdminAuthRedirectUris(adminPublicOrigin);
export const oidcConfig: AuthProviderProps = {
authority: import.meta.env.VITE_OIDC_AUTHORITY || "https://sso.hmac.kr/oidc", // Gateway Proxy URL
client_id: import.meta.env.VITE_OIDC_CLIENT_ID || "adminfront",
redirect_uri: `${window.location.origin}/auth/callback`,
redirect_uri: adminRedirectUris.redirectUri,
response_type: "code",
scope: "openid offline_access profile email", // offline_access for refresh token
post_logout_redirect_uri: window.location.origin,
popup_redirect_uri: `${window.location.origin}/auth/callback`,
post_logout_redirect_uri: adminRedirectUris.postLogoutRedirectUri,
popup_redirect_uri: adminRedirectUris.popupRedirectUri,
userStore: new WebStorageStateStore({ store: window.localStorage }),
automaticSilentRenew: false,
};

View File

@@ -0,0 +1,27 @@
import { describe, expect, it } from "vitest";
import {
buildAdminAuthRedirectUris,
resolveAdminPublicOrigin,
} from "./authConfig";
describe("admin auth config", () => {
it("uses the explicit public admin origin for staging callback URLs", () => {
const publicOrigin = resolveAdminPublicOrigin(
"https://sadmin.hmac.kr",
"http://127.0.0.1:5173",
);
expect(publicOrigin).toBe("https://sadmin.hmac.kr");
expect(buildAdminAuthRedirectUris(publicOrigin)).toEqual({
redirectUri: "https://sadmin.hmac.kr/auth/callback",
postLogoutRedirectUri: "https://sadmin.hmac.kr",
popupRedirectUri: "https://sadmin.hmac.kr/auth/callback",
});
});
it("falls back to the browser origin when no explicit public origin is set", () => {
expect(resolveAdminPublicOrigin("", "http://localhost:5173")).toBe(
"http://localhost:5173",
);
});
});

View File

@@ -0,0 +1,33 @@
export interface AdminAuthRedirectUris {
redirectUri: string;
postLogoutRedirectUri: string;
popupRedirectUri: string;
}
export const ADMIN_AUTH_CALLBACK_PATH = "/auth/callback";
export function resolveAdminPublicOrigin(
configuredOrigin: string | undefined,
browserOrigin: string,
) {
const trimmed = configuredOrigin?.trim();
if (!trimmed) {
return browserOrigin;
}
try {
return new URL(trimmed).origin;
} catch {
return browserOrigin;
}
}
export function buildAdminAuthRedirectUris(
publicOrigin: string,
): AdminAuthRedirectUris {
return {
redirectUri: `${publicOrigin}${ADMIN_AUTH_CALLBACK_PATH}`,
postLogoutRedirectUri: publicOrigin,
popupRedirectUri: `${publicOrigin}${ADMIN_AUTH_CALLBACK_PATH}`,
};
}