Opsætningsguides

Opsæt Microsoft Entra ID

Trin-for-trin guide til at oprette en Azure app-registrering, konfigurere Entra-sikkerhedsgrupper og tilslutte Ressourcify til Microsoft SSO.

Opsæt Microsoft Entra ID

Denne guide fører dig fra en tom Azure-konfiguration til fuldt fungerende Microsoft SSO med rollebaseret adgang i Ressourcify. Guiden dækker alt — app-registrering, grupper, token-konfiguration og verificering.

Forudsætninger

Inden du går i gang, skal du have:

  • Azure-adgang — rollen Application Administrator, Cloud Application Administrator eller Global Administrator i Microsoft Entra ID
  • Ressourcify-adgang — ORG_ADMIN-rollen i Ressourcify (eller adgang til miljøvariabler på serveren)
  • Produktions-URL — det domæne Ressourcify kører på, f.eks. https://app.ressourcify.dk

Overblik

Ressourcify taler med Entra ad to adskilte veje. De stiller hver sine krav til API-tilladelser, og det er den hyppigste kilde til fejl i opsætningen.

Vej 1 — Login (altid aktiv). Roller udledes af groups-claim i Microsofts JWT-token. Der foretages ingen Graph API-kald.

Bruger klikker "Log ind med Microsoft"
  └─▶ Microsoft Entra ID validerer brugeren
        └─▶ Token udstedes med groups-claim (gruppe-ID'er)
              └─▶ NextAuth modtager token
                    └─▶ Ressourcify mapper gruppe-ID'er til roller
                          └─▶ Bruger lander på dashboard med korrekt rolle

Vej 2 — Brugersynkronisering (valgfri). Et baggrundsjob henter medlemmerne af dine grupper via Microsoft Graph og opretter brugerne i Ressourcify, før de har logget ind første gang. Den vej kræver app-tilladelser med admin consent.

Sync startes (manuelt eller natligt)
  └─▶ Ressourcify henter et app-token (client credentials)
        └─▶ Graph: hent medlemmer af de fire grupper
              └─▶ Brugere oprettes/opdateres (navn, e-mail, aktiv/spærret)
                    └─▶ Roller tildeles efter gruppemedlemskab

Du kan nøjes med vej 1. Uden synkronisering oprettes en bruger blot første gang vedkommende logger ind. Synkronisering giver til gengæld et samlet overblik fra dag ét — og deaktiverer automatisk brugere, hvis Entra-konto er spærret eller slettet.


Opsætning

Opret app-registrering

  1. Gå til portal.azure.com og log ind
  2. Søg efter Microsoft Entra ID i den øverste søgelinje og vælg det
  3. Klik på App registrations i venstre navigation
  4. Klik + New registration
  5. Udfyld formularen:
    • Name: Ressourcify (eller dit foretrukne navn — vises for brugerne ved login)
    • Supported account types: Vælg Accounts in this organizational directory only
    • Redirect URI: Vælg type Web og indtast:
      https://[dit-domæne]/api/auth/callback/microsoft-entra-id
  6. Klik Register

Lokal udvikling? Tilføj http://localhost:3000/api/auth/callback/microsoft-entra-id som ekstra redirect URI. Det gøres under Authentication → Add URI efter registreringen er oprettet.

Notér Tenant ID og Client ID

Straks efter registreringen åbnes Overview-siden. Kopiér og gem:

FeltPlacering på Overview-siden
Application (client) IDVises direkte under appens navn
Directory (tenant) IDVises direkte under client ID

Forveksle ikke client ID med object ID — de vises begge på Overview-siden. Det er Application (client) ID du skal bruge.

Opret Client Secret

  1. Vælg Certificates & secrets i venstre navigation
  2. Klik + New client secret
  3. Udfyld:
    • Description: Ressourcify prod
    • Expires: Vælg 12 months (anbefalet)
  4. Klik Add
  5. Kopiér værdien i kolonnen Value umiddelbart

Kopiér Secret Value med det samme. Når du navigerer væk fra siden, skjules værdien permanent. Gem den i en password manager eller Azure Key Vault — hvis du mister den, skal du oprette en ny secret.

Der er to kolonner: Value og Secret ID. Det er Value du skal kopiere.

Konfigurér API-tilladelser

Tilladelserne afhænger af, om du kun vil have login, eller også brugersynkronisering.

Til login — påkrævet

Tilføj via + Add a permission → Microsoft Graph → Delegated permissions:

PermissionTypeAdmin consent
openidDelegatedNej
profileDelegatedNej
emailDelegatedNej
User.ReadDelegatedNej

Bekræft at statuskolonnen viser grønt flueben (Granted for [organisation]).

Til login behøver du ingen Graph-tilladelser ud over disse. Gruppemedlemskab leveres via groups-claim i tokenet.

Til brugersynkronisering — kun hvis du vil bruge den

Tilføj via + Add a permission → Microsoft Graph → Application permissions:

PermissionTypeAdmin consentHvorfor
GroupMember.Read.AllApplicationJaLæse hvem der er medlem af de fire grupper
User.Read.AllApplicationJaLæse medlemmernes navn, e-mail og om kontoen er aktiv

Klik derefter Grant admin consent for [organisation] og bekræft at begge viser grønt flueben.

Begge tilladelser er nødvendige — og fejlen er tavs. Med kun GroupMember.Read.All returnerer Graph medlemmernes ID'er, men alle øvrige felter som null. Synkroniseringen springer så samtlige brugere over uden at fejle: resultatet er "0 roller sat" og et antal under "sprunget over".

Aktiver groups-claim i token

Dette trin er afgørende: uden groups-claim kan Ressourcify ikke se gruppemedlemskab og dermed ikke tildele roller.

  1. Vælg Token configuration i venstre navigation
  2. Klik + Add groups claim
  3. Vælg Security groups
  4. Sæt flueben ved:
    • ✓ ID token
    • ✓ Access token
  5. Klik Add

Over 150 Entra-grupper i organisationen? Azure inkluderer da ikke alle gruppe-ID'er direkte i tokenet. Kontakt support@ressourcify.dk hvis du oplever login-problemer med mange grupper.

Opret Entra-sikkerhedsgrupper

Ressourcify bruger op til fire sikkerhedsgrupper til adgangskontrol. Opret dem i Microsoft Entra ID.

For hver gruppe:

  1. Gå til Microsoft Entra ID → Groups → + New group
  2. Vælg Group type: Security, angiv navn, klik Create

Opret disse fire grupper:

Anbefalet gruppenavnFunktion i RessourcifyObligatorisk?
Ressourcify - UsersAdgangsport — kun medlemmer kan logge indAnbefalet stærkt
Ressourcify - Org AdminsTildeler rollen ORG_ADMINHvis du vil bruge Org Admin-rollen
Ressourcify - Dept AdminsTildeler rollen DEPT_ADMINHvis du vil bruge Dept Admin-rollen
Ressourcify - CoordinatorsTildeler rollen COORDINATORHvis du vil bruge Coordinator-rollen

Gruppenavnene er ikke teknisk bindende — du kan frit vælge dine egne. Det er Object ID'erne der konfigureres i Ressourcify.

Adgangsport-logik: Hvis du konfigurerer gruppe-ID'et for Ressourcify - Users, kan udelukkende medlemmer af den gruppe logge ind. Tilføj dig selv til gruppen inden du tester.

Tilføj brugere til grupper

For hver gruppe:

  1. Klik på gruppen i Groups-oversigten
  2. Vælg Members → + Add members
  3. Søg og tilføj de relevante brugere
BrugertypeGrupper de skal være i
Alle medarbejdere med adgangRessourcify - Users
OrganisationsadministratorerRessourcify - Users + Ressourcify - Org Admins
AfdelingsadministratorerRessourcify - Users + Ressourcify - Dept Admins
KoordinatorerRessourcify - Users + Ressourcify - Coordinators
Øvrige medarbejdere (RESOURCE)Ressourcify - Users

En bruger kan sagtens være i flere grupper og får rollerne fra alle. Alle der logger ind får desuden baseline-rollen RESOURCE automatisk.

Kopiér gruppe-ID'er

For hver af de fire grupper:

  1. Klik på gruppen i Groups-oversigten
  2. Gå til Overview
  3. Kopiér Object Id (UUID-format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Hold de fire ID'er klar til næste trin.

Gem konfiguration i Ressourcify

  1. Log ind i Ressourcify med en ORG_ADMIN-bruger
  2. Gå til Indstillinger → Integrationer → Microsoft Entra ID
  3. Udfyld felterne:
Felt i RessourcifyTilsvarende Azure-værdi
Tenant IDDirectory (tenant) ID fra trin 2
Client IDApplication (client) ID fra trin 2
Client SecretSecret Value fra trin 3
Gruppe: Org AdminsObject ID for Ressourcify - Org Admins
Gruppe: Dept AdminsObject ID for Ressourcify - Dept Admins
Gruppe: CoordinatorsObject ID for Ressourcify - Coordinators
Gruppe: Users (adgangsport)Object ID for Ressourcify - Users
  1. Klik Gem

Test login

  1. Åbn en privat/inkognito-fane og gå til Ressourcify
  2. Du bør se knappen "Log ind med Microsoft"
  3. Log ind med en konto der er medlem af Ressourcify - Users
  4. Microsoft viser muligvis en samtykkedialog første gang — klik Acceptér
  5. Du bør lande på dashboardet

Verificér rollen:

  • Gå til Indstillinger → Min profil og bekræft at rollen er korrekt
  • Log ind med en ORG_ADMIN-konto og bekræft at administrationsfunktioner er tilgængelige

Roller opdateres kun ved login. Ændrer du gruppemedlemskab i Azure, skal brugeren logge ud og ind igen i Ressourcify.


Hvorfor kræver synkronisering User.Read.All?

User.Read.All giver på papiret læseadgang til alle brugerprofiler i tenant'en. Det er et rimeligt spørgsmål at stille ved en sikkerhedsgodkendelse, så her er begrundelsen og de afgrænsninger der findes.

Hvad Ressourcify faktisk kalder. Synkroniseringen kalder ét endpoint, GET /groups/{id}/members — én gang pr. konfigureret gruppe. Den kalder aldrig /users og henter derfor aldrig data om nogen, der ikke er medlem af en af de grupper, du selv har oprettet. For de tre rolle-grupper bruges kun medlemmernes ID; navn, e-mail og kontostatus læses udelukkende for medlemmer af Users-gruppen.

Hvorfor tilladelsen alligevel er bredere. Entra kan ikke afgrænse en application-tilladelse til en bestemt gruppe. Administrative Units hjælper heller ikke: en app skal have læserettigheder på tenant-niveau for overhovedet at kunne bruge AU-afgrænsede rolletildelinger. Tilladelsen er altså bredere end anvendelsen, og forskellen kan ikke håndhæves teknisk i Entra — kun i koden.

Hvorfor ikke User.ReadBasic.All? Den findes som application-tilladelse og ville være strammere, men dens "basic profile" er en fast liste: displayName, givenName, mail, photo, surname, userPrincipalName. accountEnabled er ikke med. Uden det felt kan Ressourcify ikke se, om en Entra-konto er spærret, og ville deaktivere samtlige brugere ved hver synkronisering. Den funktion — automatisk at lukke adgangen for fratrådte og spærrede medarbejdere — er netop en af grundene til at bruge synkronisering.

Vil du undgå tilladelsen helt? Undlad at konfigurere synkronisering. Login alene kræver ingen Graph-tilladelser, og brugere oprettes automatisk første gang de logger ind.


Fejlfinding

SymptomSandsynlig årsagLøsning
Ingen "Log ind med Microsoft"-knapEntra-konfiguration ikke gemt eller aktivGå til Indstillinger → Integrationer → Microsoft Entra ID og verificér felterne
invalid_client ved loginForkert Client ID eller Secret ValueDobbelttjek du brugte Application (client) ID og Secret Value (ikke Secret ID)
AADSTS700016Ukendt app-registreringKopiér Directory (tenant) ID direkte fra Azure Overview
AADSTS50011Redirect URI matcher ikkeGå til Azure → Authentication og verificér URI svarer nøjagtigt til din app-adresse
Login lykkes men bruger afvisesBrugeren er ikke i Ressourcify - UsersTilføj brugeren til gruppen i Azure
Bruger afvises trods gyldig Entra-konto og korrekt gruppeBrugeren står som inaktiv i Ressourcify — typisk deaktiveret af seat-loftet eller manueltSæt status til aktiv under Brugere, eller udsted flere seats
Login virker men forkert rolleGroups-claim ikke aktiveret eller forkert gruppeVerificér Token configuration → groups claim er sat til Security groups
Roller opdateres ikkeRoller synkroniseres kun ved loginBed brugeren logge ud og ind igen
Client Secret udløbetSecret overskredet udløbsdatoenOpret ny secret i Azure, opdatér i Ressourcify-Indstillinger, genstart app'en
Synkronisering melder "0 roller sat" og springer alle brugere overUser.Read.All mangler — Graph returnerer medlemmernes ID, men navn og e-mail som nullTilføj User.Read.All som Application-tilladelse og giv admin consent
Synkronisering finder 0 brugereUsers-gruppen er tom, eller forkert Object IDVerificér gruppens Object ID og at den har medlemmer
Alle brugere blev pludselig inaktiveGraph kunne ikke læse accountEnabledBekræft at User.Read.All har admin consent — ikke kun er tilføjet

Næste skridt