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.
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.
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
- Gå til portal.azure.com og log ind
- Søg efter Microsoft Entra ID i den øverste søgelinje og vælg det
- Klik på App registrations i venstre navigation
- Klik + New registration
- 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:
- Name:
- 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:
| Felt | Placering på Overview-siden |
|---|---|
| Application (client) ID | Vises direkte under appens navn |
| Directory (tenant) ID | Vises 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
- Vælg Certificates & secrets i venstre navigation
- Klik + New client secret
- Udfyld:
- Description:
Ressourcify prod - Expires: Vælg 12 months (anbefalet)
- Description:
- Klik Add
- 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:
| Permission | Type | Admin consent |
|---|---|---|
openid | Delegated | Nej |
profile | Delegated | Nej |
email | Delegated | Nej |
User.Read | Delegated | Nej |
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:
| Permission | Type | Admin consent | Hvorfor |
|---|---|---|---|
GroupMember.Read.All | Application | Ja | Læse hvem der er medlem af de fire grupper |
User.Read.All | Application | Ja | Læ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.
- Vælg Token configuration i venstre navigation
- Klik + Add groups claim
- Vælg Security groups
- Sæt flueben ved:
- ✓ ID token
- ✓ Access token
- 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:
- Gå til Microsoft Entra ID → Groups → + New group
- Vælg Group type: Security, angiv navn, klik Create
Opret disse fire grupper:
| Anbefalet gruppenavn | Funktion i Ressourcify | Obligatorisk? |
|---|---|---|
Ressourcify - Users | Adgangsport — kun medlemmer kan logge ind | Anbefalet stærkt |
Ressourcify - Org Admins | Tildeler rollen ORG_ADMIN | Hvis du vil bruge Org Admin-rollen |
Ressourcify - Dept Admins | Tildeler rollen DEPT_ADMIN | Hvis du vil bruge Dept Admin-rollen |
Ressourcify - Coordinators | Tildeler rollen COORDINATOR | Hvis 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:
- Klik på gruppen i Groups-oversigten
- Vælg Members → + Add members
- Søg og tilføj de relevante brugere
| Brugertype | Grupper de skal være i |
|---|---|
| Alle medarbejdere med adgang | Ressourcify - Users |
| Organisationsadministratorer | Ressourcify - Users + Ressourcify - Org Admins |
| Afdelingsadministratorer | Ressourcify - Users + Ressourcify - Dept Admins |
| Koordinatorer | Ressourcify - 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:
- Klik på gruppen i Groups-oversigten
- Gå til Overview
- 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
- Log ind i Ressourcify med en
ORG_ADMIN-bruger - Gå til Indstillinger → Integrationer → Microsoft Entra ID
- Udfyld felterne:
| Felt i Ressourcify | Tilsvarende Azure-værdi |
|---|---|
| Tenant ID | Directory (tenant) ID fra trin 2 |
| Client ID | Application (client) ID fra trin 2 |
| Client Secret | Secret Value fra trin 3 |
| Gruppe: Org Admins | Object ID for Ressourcify - Org Admins |
| Gruppe: Dept Admins | Object ID for Ressourcify - Dept Admins |
| Gruppe: Coordinators | Object ID for Ressourcify - Coordinators |
| Gruppe: Users (adgangsport) | Object ID for Ressourcify - Users |
- Klik Gem
Test login
- Åbn en privat/inkognito-fane og gå til Ressourcify
- Du bør se knappen "Log ind med Microsoft"
- Log ind med en konto der er medlem af
Ressourcify - Users - Microsoft viser muligvis en samtykkedialog første gang — klik Acceptér
- 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
| Symptom | Sandsynlig årsag | Løsning |
|---|---|---|
| Ingen "Log ind med Microsoft"-knap | Entra-konfiguration ikke gemt eller aktiv | Gå til Indstillinger → Integrationer → Microsoft Entra ID og verificér felterne |
invalid_client ved login | Forkert Client ID eller Secret Value | Dobbelttjek du brugte Application (client) ID og Secret Value (ikke Secret ID) |
AADSTS700016 | Ukendt app-registrering | Kopiér Directory (tenant) ID direkte fra Azure Overview |
AADSTS50011 | Redirect URI matcher ikke | Gå til Azure → Authentication og verificér URI svarer nøjagtigt til din app-adresse |
| Login lykkes men bruger afvises | Brugeren er ikke i Ressourcify - Users | Tilføj brugeren til gruppen i Azure |
| Bruger afvises trods gyldig Entra-konto og korrekt gruppe | Brugeren står som inaktiv i Ressourcify — typisk deaktiveret af seat-loftet eller manuelt | Sæt status til aktiv under Brugere, eller udsted flere seats |
| Login virker men forkert rolle | Groups-claim ikke aktiveret eller forkert gruppe | Verificér Token configuration → groups claim er sat til Security groups |
| Roller opdateres ikke | Roller synkroniseres kun ved login | Bed brugeren logge ud og ind igen |
| Client Secret udløbet | Secret overskredet udløbsdatoen | Opret ny secret i Azure, opdatér i Ressourcify-Indstillinger, genstart app'en |
| Synkronisering melder "0 roller sat" og springer alle brugere over | User.Read.All mangler — Graph returnerer medlemmernes ID, men navn og e-mail som null | Tilføj User.Read.All som Application-tilladelse og giv admin consent |
| Synkronisering finder 0 brugere | Users-gruppen er tom, eller forkert Object ID | Verificér gruppens Object ID og at den har medlemmer |
| Alle brugere blev pludselig inaktive | Graph kunne ikke læse accountEnabled | Bekræft at User.Read.All har admin consent — ikke kun er tilføjet |
Næste skridt
- RBAC-matrix — forstå hvilke roller der giver adgang til hvad
- Opret organisation, afdelinger og teams — byg organisationsstrukturen op efter SSO er på plads