Fix MPAC redirect URL (#2456)

* Fix MPAC redirect URL

* Address comment
This commit is contained in:
sindhuba
2026-04-09 10:53:43 -07:00
committed by GitHub
parent 339ba4f295
commit 246c90ae23
3 changed files with 64 additions and 17 deletions

View File

@@ -163,4 +163,42 @@ describe("AuthorizationUtils", () => {
expect((instance as any)._config.auth.redirectUri).toBe("http://localhost/redirectBridge.html");
});
});
describe("getRedirectBridgeUrl()", () => {
const originalNodeEnv = process.env.NODE_ENV;
const originalPathname = window.location.pathname;
afterEach(() => {
process.env.NODE_ENV = originalNodeEnv;
Object.defineProperty(window, "location", {
value: { ...window.location, pathname: originalPathname },
writable: true,
});
});
it("should use dev URL in development mode", () => {
process.env.NODE_ENV = "development";
expect(AuthorizationUtils.getRedirectBridgeUrl()).toBe(
"https://dataexplorer-dev.azurewebsites.net/redirectBridge.html",
);
});
it("should use MPAC path when on /mpac/", () => {
process.env.NODE_ENV = "production";
Object.defineProperty(window, "location", {
value: { origin: "https://cosmos.azure.com", pathname: "/mpac/explorer.html" },
writable: true,
});
expect(AuthorizationUtils.getRedirectBridgeUrl()).toBe("https://cosmos.azure.com/mpac/redirectBridge.html");
});
it("should use root path when not on /mpac/", () => {
process.env.NODE_ENV = "production";
Object.defineProperty(window, "location", {
value: { origin: "https://cosmos.azure.com", pathname: "/explorer.html" },
writable: true,
});
expect(AuthorizationUtils.getRedirectBridgeUrl()).toBe("https://cosmos.azure.com/redirectBridge.html");
});
});
});

View File

@@ -50,12 +50,25 @@ export function decryptJWTToken(token: string) {
return JSON.parse(tokenPayload);
}
export function getRedirectBridgeUrl(): string {
if (process.env.NODE_ENV === "development") {
return "https://dataexplorer-dev.azurewebsites.net/redirectBridge.html";
}
const basePath = window.location.pathname.startsWith("/mpac/") ? "/mpac" : "";
return `${window.location.origin}${basePath}/redirectBridge.html`;
}
export function getPostLogoutRedirectUrl(): string {
if (process.env.NODE_ENV === "development") {
return "https://dataexplorer-dev.azurewebsites.net/hostedExplorer.html";
}
const basePath = window.location.pathname.startsWith("/mpac/") ? "/mpac" : "";
return `${window.location.origin}${basePath}`;
}
export async function getMsalInstance() {
// Compute the redirect bridge URL for MSAL v5 COOP handling
const redirectBridgeUrl =
process.env.NODE_ENV === "development"
? "https://dataexplorer-dev.azurewebsites.net/redirectBridge.html"
: `${window.location.origin}/redirectBridge.html`;
const redirectBridgeUrl = getRedirectBridgeUrl();
const msalConfig: msal.Configuration = {
cache: {

View File

@@ -2,7 +2,12 @@ import * as msal from "@azure/msal-browser";
import { useBoolean } from "@fluentui/react-hooks";
import * as React from "react";
import { ConfigContext } from "../ConfigContext";
import { acquireTokenWithMsal, getMsalInstance } from "../Utils/AuthorizationUtils";
import {
acquireTokenWithMsal,
getMsalInstance,
getPostLogoutRedirectUrl,
getRedirectBridgeUrl,
} from "../Utils/AuthorizationUtils";
const cachedTenantId = localStorage.getItem("cachedTenantId");
@@ -59,10 +64,7 @@ export function useAADAuth(config?: ConfigContext): ReturnType {
return;
}
// Use redirect bridge for MSAL v5 COOP handling
const redirectBridgeUrl =
process.env.NODE_ENV === "development"
? "https://dataexplorer-dev.azurewebsites.net/redirectBridge.html"
: `${window.location.origin}/redirectBridge.html`;
const redirectBridgeUrl = getRedirectBridgeUrl();
try {
const response = await msalInstance.loginPopup({
@@ -87,10 +89,7 @@ export function useAADAuth(config?: ConfigContext): ReturnType {
setLoggedOut();
localStorage.removeItem("cachedTenantId");
// Redirect back to the hosted explorer after logout
const postLogoutRedirectUri =
process.env.NODE_ENV === "development"
? "https://dataexplorer-dev.azurewebsites.net/hostedExplorer.html"
: `${window.location.origin}`;
const postLogoutRedirectUri = getPostLogoutRedirectUrl();
msalInstance.logoutRedirect({ postLogoutRedirectUri });
}, [msalInstance]);
@@ -100,10 +99,7 @@ export function useAADAuth(config?: ConfigContext): ReturnType {
return;
}
// Use redirect bridge for MSAL v5 COOP handling
const redirectBridgeUrl =
process.env.NODE_ENV === "development"
? "https://dataexplorer-dev.azurewebsites.net/redirectBridge.html"
: `${window.location.origin}/redirectBridge.html`;
const redirectBridgeUrl = getRedirectBridgeUrl();
try {
const response = await msalInstance.loginPopup({
redirectUri: redirectBridgeUrl,