Bemærk
Denne side inkluderer beskrivelse af den tidligere "OIDC letvægtsløsning", som nu er en variant af den fulde OIDC løsning.
Hvad er Unilogins OIDC-løsning?
OIDC-løsningen bygger på OIO specifikationen af OpenID Connect (OIDC) protokollen, som understøtter autentifikation af brugeren og Single Sign-On (SSO).
OIDC-standarden er et rammeværk baseret på JSON Web Tokens (JWT) til udveksling af sikkerhedsinformationer mellem de forskellige parter. Sikkerhedsinformationen udtrykkes i form af JWT påstande (claims), som er digitalt signerede JSON-strukturer, der udveksles mellem de kommunikerende parter. Ved udveksling er det muligt at sende information om brugeren i form af JWT tokens, som kan anvendes til autentificering og Web SSO.
Unilogins OIDC-løsning er et alternativ til Unilogins SAML-løsning, som begge integrerer til Unilogin Brokeren. Læs mere om SAML-løsningen her
Samme muligheder som ved SAML
Med OIDC får man samme attributter retur i responset, som hvis man valgte en SAML-løsning.
Det vil derudover også være muligt at:
- vælge et af flere mellem flere sikringsniveauer i Requestet
- benytte licens tjek til at styre brugerens adgang til sin tjeneste.
Listen af attributter som er tilgængelige findes i et senere afsnit på denne side.
Implementering af tjeneste
OIDC-løsningen bygger på OIO specifikationen, hvorfor der stilles en række krav til tjenesterne ift. korrekt implementering til Unilogin. For at hjælpe med at foretage integrationen til OIDC har vi udarbejdet en vejledning som tydeliggør krav til en tjeneste implementering og indeholder eksempel på kode. Vejledningen findes her.
Licens og dataminimering
OIDC-løsningen kan autorisere brugere med Unilogins licenssystem GivAdgang. Licens til en specifik tjeneste oprettes enten af en brugeradministrator på en institution eller af brugeradministrator for tjenesten selv. En brugeradministrator kan give en klasse, aktørtype eller en institution adgang til en tjeneste. Når brugeren efterfølgende logger på tjekkes det om vedkommende har licens til den specifikke tjeneste. Hvis tjenesten kræver, at brugeren har licens, og brugeren mangler, så vil adgangen blive afvist.
Bemærk at det er ikke obligatorisk at benytte licens for at benytte OIDC-løsningen. Imidlertid er licensmodellen velegnet til tjenester, som ønsker øget dataminimering som led i tjenestens risikovurdering i forhold til NSIS sikringsniveauerne. Ved brug af licenssystemet GivAdgang kan tjenesten begrænses til at få videreformidlet institutionsnummer, aktørtype og et tjenestespecifikt pseudonym for brugeren ved login.
Oprettelse af en OIDC tjeneste
Feltspecifikation for oprettelse af OIDC tjeneste
Vi skal bruge metadata om tjenesten for at oprette forbindelse mellem den og Unilogin. Metadata skabelon til oprettelse af tjeneste kan hentes her.
Følgende parametre kan findes i skabelonen. Parametre markeret som krav skal udfyldes. Resterende kan udfyldes efter behov.
Parameter | Type | Værdi | Eksempel | Krav |
---|---|---|---|---|
clientId | string | URI med tjenestens ID | "https://tjeneste.domaene.dk/min-tjeneste" | X |
redirectUris | string[] | Array med minimum en URL som brugeren redirectes til ved login. Relative paths kan bruges hvis Root URL er sat, ellers vil server root path blive brugt. Wildcards (*) er ikke tilladt. | [ "https://tjeneste.domaene.dk/login" ] | X |
udbyderNummer | string | ID som modtages ved oprettelse som udbyder på https://tilslutning.stil.dk/ | "A01234" | X |
tjenesteKode | string | Kode der bindes til tjenesten. Dette bruges til tjekke om brugeren har licens til tjenesten. Koden oprettes af tjenesteudbyderen ved registrering af tjenesten i GivAdgang. | "min-tjeneste-kode" | (X) kun et krav hvis der benyttes licens |
manglerLicensUrl | string | Link der redirectes til, hvis brugeren der logger ind mangler licens til tjenesten. Hvis denne ikke er udfyldt, redirected brugere uden licens ikke væk, men logges in med response-parameter "has_license" : "false" | "https://tjeneste.domaene.dk/mangler-licens" | (X) kan benyttes hvis det ønskes at brugeren automatisk redirectes til den ønskede URL hvis brugeren mangler licens |
name | string | Tjenestens navn | "Min Tjeneste" | X |
description | string | Beskrivelse af tjenesten (max. 255 tegn) | "Min Tjeneste har dette formål:" | |
rootUrl | string | Grund URL, som redirectsUris kan bruge til relative paths | "https://tjeneste.domaene.dk" | |
webOrigins | string[] | Array med URI'er som tjenesten tillader til CORS (Cross-Origin Resource Sharing) | [ "https://domaene2.dk" ] |
Eksempel på udfyldt OIDC metadata
Metadata med eksempel data
|
OIDC attributter i responset
Efter brugeren har logget ind gennem Unilogin, og ender tilbage på tjenesten, vil tjenesten modtage nogle attributter fra brugerens ID token. Disse attributter kan derefter benyttes af tjenesten til at bestemme hvilke yderligere handlinger der skal tages, og hvilke ressourcer på siden, som brugeren skal have adgang til.
De forskellige claims inkluderet i respons kan ses i følgende tabel:
| Obligatorisk | Fulde navn | Beskrivelse | Eksempel værdier på felter | Note |
---|---|---|---|---|---|
| ja | Expiration time | Udløbstidspunkt for token | 1680093037 | |
| ja | Issued at | Tidspunktet token blev udstedt, som et JSON nummer | 1680092737 | |
| ja | Time for End-User authentication | Tidspunktet autentifikationen skete, som et JSON nummer | 1680092737 | |
| ja | JWT ID | Et unikt ID for token | 5d77a80b-47e7-4cfa-8029-8a648be6e3f4 | |
| ja | Issuer Identifier | ID for udsteder af token. Denne er tilsvarende attributten "Broker" ved SAML login. | https://broker.unilogin.dk/auth/realms/broker | |
| ja | Audience | Modtager af tokenen, i form af et EntityID | https://tjeneste.domaene.dk/min-tjeneste | |
| ja | Authorized party | Dem som ID tokenen er udstedt til | https://tjeneste.domaene.dk/min-tjeneste | |
| ja | Authentication Context Class Reference | Bruges til NSIS sikringsniveau | https://data.gov.dk/concept/core/nsis/loa/Low | NSIS niveau "High" vil ikke kunne forekomme da Unilogin Brokeren bliver anmeldt på niveau "Substantial" https://data.gov.dk/concept/core/nsis/loa/High |
| ja | Token Category | Type af token (Sættes af keycloak. Sættes som ID ved testtjenesten) | Bearer | |
| ja | Number once | String som bruges til at tilknytte klientsessionen med en ID token | 621aa767f3d501a2d85ef9bd7632a6d5 | |
| ja | Session State | Bruges til Session Management | b3ff44a3-055f-40c5-a40c-26d265785976 | |
| ja | Subject Identifier | Tjenestespecifikt pseudonym for brugeren som logger ind. Pr. default sættes brugerens BrokerID som sub. For at der bruges et tjenestespecifikt pseudonym for tjenester tilkoblet OIDC protokollen, kan der oprettes en protokol mapper på klienten af typen 'Pairwise subject identifier'. Den opretter et pseudonym for brugeren og sætter den på brugerens profil, når de logger ind. | dd0fa533-fe2f-45f8-a2c9-f65503df7c68 | |
Claim | Obligatorisk | Scope | Beskrivelse | Eksempel værdier på felter | Note |
has_license | nej | UserHasLicenseClientScope | GivAdgang specifikt felt. Boolean værdi om brugeren har licens til udbyder/tjeneste | true/false | Er false når bruger mangler licens, og manglerLicensUrl ikke er udfyldt på klienten |
institution_ids | nej | InstitutionIdsClientScope | GivAdgang specifikt felt. Institutioner som brugeren er tilknyttet OG har licens til | 999904, R00147 | |
spec_ver | nej | OidcSpecVersionClientClaim | Brugerdefineret felt, som angiver OIDC versionen ["OIDC.3.0-UNILOGIN"] | "OIDC.3.0-UNILOGIN" | |
aktoer_gruppe | nej | OidcAktoerGruppeClientClaim | Brugerdefineret felt, som indeholder aktørgruppe, som bruger vil logge ind med | Medarbejder/Elev/Ekstern/Kontaktperson | |
uniid | nej | OidcUniIdClientClaim | Brugerdefineret felt, som indeholder brugers UniID | 1000013b36, henr276q | UniID'et vil fremadrettet bestå af 10 tegn (tal og bogstaver) i vilkårlig rækkefølge (hexadecimal). Skiftet vil ske løbende per leverandør henover perioden, og der vil derfor være forskel på, hvornår den enkelte institution og/eller leverandør vil opleve skiftet. |
unilogin_loa | nej | OidcUniloginLoaClientClaim | Brugerdefineret felt, indeholder dk:unilogin:loa [EnFaktor, ToFaktor] | EnFaktor/ToFaktor/VoksenVerificeret | |
loa | nej | OidcAssuranceLevelClientClaim | Brugerdefineret felt, indeholder dk:gov:saml:attribute:AssuranceLevel [2, 3]
| 2/3 | Bliver på sigt udfaset og erstattet med NSIS niveau i acr parameteren |
cvr | nej | OidcCvrClientClaim | Brugerdefineret felt, som angiver erhvervsprofilens CVR | 32145698 | Denne værdi kommer kun med ved login med NemLog-in På sigt vil dette også blive returneret ved login med Unilogin. |
rid | nej | OidcRidClientClaim | Brugerdefineret felt, som angiver erhvervsprofilens RID | 12345678 | Denne værdi kommer kun med ved login med NemLog-in. |