Gå til indholdet

Reference

Fejlkoder

HTTP Betydning
400 Ugyldig X-VDX-AuthorizationId
401 Manglende/ugyldig JWT, eller manglende påkrævede claims
403 Lokal bruger inaktiv/slettet i VDX, eller autorisation tilhører ikke brugeren
404 Gruppe ikke fundet (/v1/user/group, /v1/user/group/parents)
429 Rate limit overskredet (100 requests/minut pr. IP)
500 Uventet serverfejl

Health-endpoints er undtaget rate limiting: /health/live, /health/ready, /health/startup.

Typiske 401-beskeder

{ "message": "Missing required claims (email, organisation_id)" }
{ "message": "Missing required claims (email, organisation_id, video:role)" }

(External brugere på profil- og gruppe-endpoints.)

Autorisationsskift — specifikke fejl

HTTP Besked
400 { "message": "Invalid X-VDX-AuthorizationId" }
403 { "message": "Authorization does not belong to user" }

Anbefalet klient-adfærd

Status Kontekst Handling
401 Efter login / løbende Forsøg token-refresh; ellers logud
403 GET /v1/user efter login Logud — bruger deaktiveret eller ingen adgang
403 Autorisationsskift Afvis skift, behold eksisterende kontekst
404 Gruppe-endpoints Vis "gruppe ikke fundet", log til support
429 Alle Backoff og retry med delay
500 Profil-kald Fail closed — logud, vis fejlbesked

Se Best practices for fail-closed princip og Kodeeksempler: Fejlhåndtering.

Se også JWT-claims og Autorisationsskift.

JWT-claims

Access token udstedes af VDX Keycloak efter succesfuldt login. API'et validerer JWT (signatur, audience, lifetime) og læser claims til brugeropløsning.

Claim Påkrævet
dk:medcom:email Altid (eneste obligatoriske claim på /v1/user/authorizations)
dk:medcom:organisation_id /v1/user, /v1/user/group, /v1/user/group/parents
dk:medcom:video:role External brugere på profil- og gruppe-endpoints
dk:medcom:user_type Valgfri (default external hvis mangler)
sid Valgfri (session-id; genereres hvis mangler)
azp Valgfri (applikationsidentitet — Keycloak client id)

Audience

JWT aud skal matche det forventede audience for miljøet. Stage default: organisation-audience. Bekræft værdi ved adgangsanmodning hos MedCom.

Roller

Roller fra dk:medcom:video:role (kan være multi-valued eller komma-separeret) mappes til roles-feltet i /v1/user-responsen. Brug responsen til adgangstjek — ikke rå claims alene.

Typiske management-roller:

  • vdx-admin
  • management-admin
  • management-readonly

Avancerede external user-scenarier

For scenarier med dk:medcom:organisation_data (organisations-træer fra IdP) eller auto-gruppeoprettelse for ukendte external brugere, kontakt MedCom på vdx@medcom.dk — disse er typisk forhåndsaftalt pr. integration.

Se også Autentificering, Fejlkoder og UserProfile-modellen.

Flow-diagrammer

Mønster A — backend-til-API (anbefalet)

sequenceDiagram
    participant Browser
    participant WebApp as WebApp backend
    participant Keycloak
    participant AuthAPI as VDXAuthAPI

    Note over Browser,AuthAPI: 1) Login
    Browser->>WebApp: GET /login
    WebApp->>Keycloak: redirect (PKCE: code_challenge)
    Keycloak->>Browser: Login-side
    Browser->>Keycloak: Credentials
    Keycloak->>WebApp: redirect callback (code)
    WebApp->>Keycloak: POST token (code_verifier)
    Keycloak->>WebApp: access_token + refresh_token
    WebApp->>AuthAPI: GET /v1/user (Bearer)
    AuthAPI->>WebApp: Brugerprofil (kontekst, roles)
    WebApp->>Browser: Sæt auth cookie + redirect til app

    Note over Browser,AuthAPI: 2) Efterfølgende requests (cache 30s i memory)
    Browser->>WebApp: GET /sider-i-din-app
    WebApp->>AuthAPI: GET /v1/user (Bearer + evt. X-VDX-AuthorizationId)
    AuthAPI->>WebApp: Brugerprofil
    WebApp->>Browser: Render side

    Note over Browser,AuthAPI: 3) Autorisationsskift
    Browser->>WebApp: Vælg autorisation (id)
    WebApp->>AuthAPI: GET /v1/user (X-VDX-AuthorizationId: id)
    AuthAPI->>WebApp: Profil i ny kontekst (isAuthorization=true)
    WebApp->>Browser: Persister valgt autorisation (cookie/session)

    Note over Browser,AuthAPI: 4) Slip autorisation
    Browser->>WebApp: Slip autorisation
    WebApp->>AuthAPI: GET /v1/user (uden header)
    AuthAPI->>WebApp: Basis-profil (egen organisation)
    WebApp->>Browser: Fjern persisteret autorisation

Mønster B — browser-til-API (CORS-baseret)

sequenceDiagram
    participant Browser
    participant Keycloak
    participant AuthAPI as VDXAuthAPI

    Browser->>Keycloak: PKCE login (oidc-bibliotek)
    Keycloak->>Browser: access_token + refresh_token
    Browser->>AuthAPI: GET /v1/user (Bearer)
    AuthAPI->>Browser: Brugerprofil
    Browser->>AuthAPI: GET /v1/user/authorizations
    AuthAPI->>Browser: Autorisationsliste
    Note over Browser,AuthAPI: Ved autorisationsskift sættes X-VDX-AuthorizationId
    Browser->>AuthAPI: GET /v1/user (med header)
    AuthAPI->>Browser: Opdateret profil i ny kontekst

Se også Login-flow, Integrationsmønstre og Autorisationsskift.