Jag använder mig utav Auth.js på jobbet för att limitera att enbart konton som tillhör företaget kan logga in, jag använder mig utav Microsoft Entra ID för att logga in och jag gör det på följande sätt:
(Detta är byggt i ett NextJS projekt)
Auth.ts:
import NextAuth from "next-auth"
import MicrosoftEntraID from "@auth/core/providers/microsoft-entra-id";
export const { handlers, signIn, signOut, auth } = NextAuth({
providers: [
MicrosoftEntraID({
clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID,
issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER,
clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET,
authorization: {
params: {
scope: "openid profile email User.Read",
},
},
}),
],
secret: process.env.AUTH_SECRET
})
Middleware.ts
export { auth as middleware } from "@/auth"
Sedan så finns det en API endpoint:
// API path: /app/api/auth/[...nextauth]/route.ts
import { handlers } from "@/auth" // Refererar till auth.ts som ligger i root mappen
export const { GET, POST } = handlers
Sedan för att logga in en användare så kan du i en React komponent göra:
<form
action={async () => {
"use server";
await signIn("microsoft-entra-id", {
redirectTo: "/",
});
}}
>
<Button type="submit" className="w-full">
Sign in with Microsoft
</Button>
</form>
För att sedan kolla ifall en person har en valid session så kan du exempelvis göra:
const session = await auth();
if (!session) {
return redirect("/login");
}
Detta är högst troligen inte det bästa och smidigaste sättet att kontrollera samt sköta autentisering, du skulle i din middleware kontrollera API endpoint och sidor som du vill skydda ifall en person har en giltig session där igenom istället.
Se till också att du registrerar din applikation i Microsoft Azure portalen och att du använder korrekta secrets!