@automatiseerjouwproces/identity-kit
v0.2.3
Published
@automatiseerjouwproces/identity-kit ===================================
Readme
@automatiseerjouwproces/identity-kit
Een compacte auth-kit voor Next.js App Router met een kant-en-klare Azure AD (Entra ID) loginflow, sessie-cookie en React-context.
Installatie
pnpm add @automatiseerjouwproces/identity-kitConfiguratie (auth.config.ts)
import { createAuthConfig } from "@automatiseerjouwproces/identity-kit";
export const authConfig = createAuthConfig({
provider: "azure",
postLoginRedirectPath: "/",
jwtSecret: process.env.AJP_IDENTITY_JWT_SECRET ?? "",
azure: {
tenantId: process.env.AZURE_TENANT_ID ?? "",
clientId: process.env.AZURE_CLIENT_ID ?? "",
clientSecret: process.env.AZURE_CLIENT_SECRET ?? "",
redirectUri: `${process.env.APP_ORIGIN}/api/auth/callback`,
scopes: ["openid", "profile", "email"],
// Optioneel: service principal (Enterprise App) object ID als je die elders nodig hebt
servicePrincipalId: process.env.AZURE_AD_SERVICE_PRINCIPAL_ID,
// Optioneel: map Azure app role IDs/names → app-roles, en group-namen → app-roles (fallback)
roleMapping: {
// "00000000-0000-0000-0000-000000000000": "ADMIN",
},
groupRoleMapping: {
// "MyApp-Admin": "ADMIN",
},
// Zet op false als je geen Graph calls voor appRoleAssignments wilt doen
fetchAppRolesFromGraph: true,
},
});API routes (App Router)
// app/api/auth/login/route.ts
import { createAppRouterHandlers } from "@automatiseerjouwproces/identity-kit";
import { authConfig } from "../../../auth.config";
const handlers = createAppRouterHandlers(authConfig);
export const GET = handlers.loginHandler;
// app/api/auth/callback/route.ts
export const GET = handlers.callbackHandler;
// app/api/auth/logout/route.ts
export const GET = handlers.logoutHandler;
// app/api/auth/session/route.ts (voor client-side status)
export const GET = handlers.sessionHandler;Server utilities
// app/protected/route.tsx
import { requireAuth } from "@automatiseerjouwproces/identity-kit";
import { authConfig } from "../auth.config";
export default async function ProtectedPage({ request }: { request: Request }) {
const userOrRedirect = await requireAuth(request, authConfig);
if (userOrRedirect instanceof Response) return userOrRedirect;
return <div>Welkom {userOrRedirect.name}</div>;
}React integratie
// app/layout.tsx
import { IdentityProvider } from "@automatiseerjouwproces/identity-kit/react";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="nl">
<body>
<IdentityProvider>{children}</IdentityProvider>
</body>
</html>
);
}// app/login/page.tsx
import { LoginPage } from "@automatiseerjouwproces/identity-kit/react";
export default function Login() {
return <LoginPage />;
}Middleware (optioneel)
// middleware.ts
import { createAuthMiddleware } from "@automatiseerjouwproces/identity-kit";
import { authConfig } from "./auth.config";
const authMiddleware = createAuthMiddleware(authConfig, {
protectedPaths: ["/app/*"],
redirectTo: "/login",
});
export async function middleware(request: Request) {
return authMiddleware(request);
}Belangrijk
- Gebruik altijd een sterk
AJP_IDENTITY_JWT_SECRET. - De React-provider stuurt je naar
/api/auth/loginen/api/auth/logout; zorg dat deze routes bestaan. - De
sessionHandlergeeft{ user }terug voor de client-side status; voeg deze route toe. - Als je app-roles via Graph wilt lezen, zorg dat je scopes toegang geven (bijv.
Directory.Read.All/AppRoleAssignment.Read.All) en vulservicePrincipalId+ optionele mappings in.
