Add OIDC dashboard auth (#1020)

This commit is contained in:
Walter Cheng
2026-05-11 22:43:42 -04:00
committed by GitHub
parent a48fa4eb21
commit c3d91b019b
14 changed files with 1016 additions and 67 deletions

View File

@@ -0,0 +1,54 @@
import { SignJWT, jwtVerify } from "jose";
const SECRET = new TextEncoder().encode(
process.env.JWT_SECRET || "9router-default-secret-change-me"
);
export function shouldUseSecureCookie(request) {
const forceSecureCookie = process.env.AUTH_COOKIE_SECURE === "true";
const forwardedProto = request?.headers?.get?.("x-forwarded-proto");
const isHttpsRequest = forwardedProto === "https";
return forceSecureCookie || isHttpsRequest;
}
export async function createDashboardAuthToken(claims = {}) {
return new SignJWT({ authenticated: true, ...claims })
.setProtectedHeader({ alg: "HS256" })
.setIssuedAt()
.setExpirationTime("24h")
.sign(SECRET);
}
export async function verifyDashboardAuthToken(token) {
if (!token) return false;
try {
await jwtVerify(token, SECRET);
return true;
} catch {
return false;
}
}
export async function getDashboardAuthSession(token) {
if (!token) return null;
try {
const { payload } = await jwtVerify(token, SECRET);
return payload;
} catch {
return null;
}
}
export async function setDashboardAuthCookie(cookieStore, request, claims = {}) {
const token = await createDashboardAuthToken(claims);
cookieStore.set("auth_token", token, {
httpOnly: true,
secure: shouldUseSecureCookie(request),
sameSite: "lax",
path: "/",
});
}
export function clearDashboardAuthCookie(cookieStore) {
cookieStore.delete("auth_token");
}