Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Alle OCES-certifikater udstedes af Nets DanID der varetager denne opgave for Digitaliseringsstyrelsen. Nets DanID har et rodcertifikat og herunder en række krydscertifikater som bruges til at udstede OCES-certifikaterne. Specielt kan det nævnes at det certifikat, en STS service er konfigureret med, blot er endnu et udstedt certifikat, ganske som alle andre udstedte certifikater. Dog definerer dette certifikat den omtalte føderation. I praksis er det anvender-bibliotekerne Seal.Java og Seal.Net, der kender til dette certifikat og dermed kan verificere id-kort med en signatur, der stammer fra certifikatet.

Id-kort

Id-kortet er det bærende element ifm. signering i STS'en. Som beskrevet i platformsintroduktionen er id-kortet et XML-dokument der indeholder informationer om den person, virksomhed eller applikation, som foretager en forespørgsel mod en NSP-service. Når man ombytter et id-kort i STS'en, placeres id-kortet under SOAP Body elementet. Når man medsender et id-kort ifm. kald af NSP-services placeres det under SOAP Header elementet.

...

Attributter

Et id-kort består af en mængde attributter som anvendersystemet udfylder. En del af disse attributter bliver verificeret af STS, og nogle bliver valideret af komponenterne. Verifikationen i STS gennemgås i næste hovedafsnit.

  • Navn: En identifikation af den person/organisation som id-kortet skal repræsentere. Hvis der ikke angives et navn anvender Seal enten brugerens CPR-nummer eller organisationens id.
  • Id: Et internt, unikt id, der genereres af Seal.
  • Oprettet: Det tidspunkt id-kortet er oprettet og derved gyldigt fra.
  • Udløber: Det tidspunkt id-kortet udløber.
  • Udsteder: Navnet på den instans, der har udstedt id-kortet. Hver STS-service har sin egen streng. Det er det muligt for anvendere at angive denne, når der genereres et id-kort.
  • Autentifikationsniveau: Ved brug af STS er der kun to valide muligheder for autentifikationsniveau; 3 hvis der er tale om et systemid-kort signeret med et VOCES-certifikat eller FOCES-certikat, eller 4, hvis der er tale om et brugerid-kort signeret med et MOCES-certifikat.
  • Organisation: Navnet, typen og et id for den organisatoriske enhed som id-kortet repræsenterer. Typen kan være CVR-nummer, en SKS-kode, et yder-nummer eller et p-nummer (Produktionsenhedsnummer).
  • IT System: Navnet på det system der initierede forespørgslen. Dette er en fritekst, der kan indsættes af anvendersystemet og vil blive bevaret i det STS signerede id-kort. I nogle tilfælde bruges denne værdi af NSP-komponenter. F.eks. bruges værdien af NAS til at identificere et Pullpoint.

Hvis der er tale om et brugerid-kort er følgende attributter også tilstede

  • Bruger: CPR-nummeret, fulde navn og email-adresse på den person som id-kortet repræsenterer.
  • Rolle: Den firecifrede uddannelseskode som brugerens autorisation har. Koderne i autorisationsregistret er et subset af uddannelseskoderne fra Danmarks Statistik. Som eksempel kan nævnes at uddannelseskoden 7170 bruges for læger og 5166 bruges for sygeplejersker.
  • Autorisationsid: Det autorisationsID som brugerens autorisation har. En anvender har en eller flere autorisationer, hvert med et unikt ID og en uddannelseskode.
  • Ansættelse: Den ansættelse i organisationen som brugeren har. Denne værdi er en fritekst og bevares i det STS-signerede id-kort.

Certifikat og signatur

Når et id-kort signeres, enten af anvenderen eller af STS, bliver certifikatets offentlige nøgle lagt ind på id-kortet og kortet signeres med certifikatets private nøgle. Seal-bibliotekerne udfører disse opgaver for een. Hvis man ønsker at vide hvordan det praktisk foregår, så er hele processen beskrevet i "Den Gode Webservice" [DGWS].

Verifikation

Når STS'en modtager en signeringsforespørgsel verificeres id-kortet og anvenderens certificat i flere skridt. Disse skridt er kort beskrevet i de følgende afsnit, og er yderligere uddybet i STS dokumentationen. Verifikationen betyder at komponenter kan stole på korrektheden af de nævnte attributer, hvis id-kortet er signeret af STS'en.

Gyldighed

Et id-kort er kun gyldigt i en bestemt periode. STS'en tjekker derfor at denne periode er oplyst på id-kortet og at det indeholder kaldstidspunktet. Dette gøres for at sikre at man ikke kan udstede et id-kort, der først bliver gyldigt en gang ude i fremtiden.

Et id-kort kan maksimalt være gyldigt i 24 timer, derfor tjekker STS at den ønskede gyldighedsperioden ikke er længere end 24 timer.

Certifikat

Det certifikat, som anvender har brugt til at signere id-kortet i forespørgslen, skal være signeret af Nets DanID's rodcertifikatet (eller af et af krydscertifikaterne). Da der findes flere gyldige sæt af disse (test og produktion), er det vigtigt at anvender har styr på hvilket sæt den kaldende STS er en del af.

Spærrelister

Selv om et certifikat er korrekt udstedt til føderationen, kan det godt blive nægtet adgang. Dette sker ved hjælp af en såkaldt blackliste, der indeholder certifikater, der ikke længere må anvendes. Denne liste vedligeholdes som en del af certifikatinfrastrukturen og anvendes af STS til at afvise certifikater, der f.eks. er blevet kompromiteret eller på anden måde har mistet deres autoritet.

CVR-nummer

STS verificerer at det angivne CVR-nummer matcher det CVR-nummer, der er angivet i certifikatet.

Personnummer

Hvis forespørgslen indeholder et brugerid-kort tjekkes at det angivne personnummer matcher det personnummer, der blev brugt da medarbejdercertifikatet blev udstedt. Verifikationen anvender en ekstern webservice til at finde det personnummer der er knyttet til CVR/RID-nummeret i certifikatet. Hvis der ikke var tilknyttet er CPR-nummer til certifikatet ved udstedelse, så kan dette certifikat ikke bruges til at få et signeret id-kort.

Autorisation

Hvis forespørgslen indeholder et brugerid-kort, så laves der et opslag i autorisationsregisteret for at finde den autorisation, som brugeren anvender. Hvis der er angivet en rolle og/eller et autorisationsID i forespørgelsen, anvendes disse til at udvælge autorisationen. I "STS Anvender dokumentet" er udvælgelsesalgoritmen beskrevet i detaljer. Den følgende liste beskriver de gængse situationer med angivelse af autorisation. Disse situationer er også indeholdt i medfølgende eksempler.

  • En bruger med en autorisation: hvis en bruger kun har en autorisation kan denne angives eller helt undlades og dermed lade STS vælge den ene.
  • En bruger med flere autorisationer: anvendere skal her angive nok information for STS til at finde en entydig autorisation.
  • En bruger uden autorisationer: her skal anvendere undlade at angive en gyldig autorisation.

Den konkrete udformning af forespørgelsen til STS kan ses i eksemplerne.

Signering af id-kort

Adgang

...

/sts/services/NewSecurityTokenService

/sts/services/SecurityTokenService

...

Udstedelse af STS-signeret id-kort.

Snitfladebeskrivelse og brug

Formålet med STS er at sikre identiteten af og autorisere brugere der ønsker at tilgå services inden for en føderation [SOSI] på sundhedsdatanettet.

Snitfladen SecurityTokenService er en legacy udgave af NewSecurityTokenService. I NewSecurityTokenService overskrives NameID/AlternativeIdentifier, hvilket vil sige at anvender ikke kan bestemme indholdet heraf.

Snitfladerne beskrives detaljeret her:
STS - Guide til anvendere - Signering af id-kort 

Medarbejder-Billetomveksling

Adgang

...

/sts/services/OIOSaml2Sosi

/sts/services/Sosi2OIOSaml

/sts/services/JWT2OIOSaml

...

Kan veksle mellem OIOSaml (nem-login) token og signeret id-kort, hvor token skal være signeret af troværdig tredjepart (nemlogin).

Kan veksle fra JWT til OIOSAML, hvor JWT er udstedet og signeret af en OpenID connect server.

Ombytter STS-signeret id-kort eller JSON Web Token til OIOSaml-token rettet mod et specifikt audience, f.eks. sundhed.dk eller forløbsplaner.dk.

Fælles offentlig brugerstyring (NemLog-In)

Fællesoffentlig brugerstyring skal gøre det digitale Danmark mere sikkert, mindske investeringerne i infrastruktur for offentlige myndigheder og skabe bedre service for borgerne. Dette sker ved at lade en række webapplikationer og webservices indgå i en fælles føderation (sikkerhedskontekst).

Brugeren autentificeres ved anvendelse af NemLog-in og får hermed adgang til alle applikationer og services inden for NemLog-in føderationen (Single sign-on). Autentifikation med NemLog-In kan enten være baseret på NemId (papkort) eller anvendelse af digital signatur (OCES-certifikater).

NemLog-In er leveret af NNIT og har Digitaliseringsstyrelsen som operatør og CSC som driftsleverandør.

En oversigt over relevante materialer findes på http://www.digst.dk/Loesninger-og-infrastruktur/NemLogin/Det-nye-nemlogin. En kort intro til NemLog-In kan ses under http://www.digst.dk/Loesninger-og-infrastruktur/NemLogin/Det-nye-nemlogin.

Adgang til NemLog-in føderationen

Når en uidentificeret bruger tilgår en webapplikation, der indgår i NemLog-In føderationen, foretages autentifikation ikke af webapplikationen selv, men derimod med anvendelse af NemLog-In som Identity Provider (IdP).

Brugeren videredirigeres til IdP'en i form at et autentifikationsrequest. IdP'en efterspørger om nødvendigt credentials fra brugeren (i form af digitalt certifikat eller papkort) og dirigerer herefter brugeren tilbage til webapplikationen med et krypteret token.

Det krypterede NemLog-in token er altid målrettet en given webapplikation. Det er signeret af NemLog-in og krypteret med webapplikationens offentlige nøgle og kan derfor kun anvendes af denne applikation. Dekryptering åbner op for at aflæse de indeholdte informationer omkring brugerens identitet.

Applikationen har tillid til NemLog-in (trust) og kan derfor stole på de oplysninger dette token indeholder.

Gliffy Diagram
nameflow-nemlogin
pagePin1

Undervejs etableres en browser-session med NemLog-In IdP'en, som gør det muligt at undgå gentagen afgivelse af credentials ved tilgang til en anden webapplikation indenfor føderationen (Single sign-on). Samme session mellem bruger og IdP kan således give adgang til flere webapplikationer - ved at føde et NemLog-In token for hver applikation.

NemLog-in token

Et NemLog-In token er et eksempel på en OIO-SAML assertion. OIO-SAML er en dansk profilering af den internationale SAML 2.0 standard. Dvs. man har taget standarden og skræddersyet den til danske forhold - herunder f.eks. hvordan cpr- og cvr-numre kan anvendes til at identificere personer og virksomheder.

Endvidere findes en OCES subprofil, som beskriver andre relevante ting f.eks. at en OIO-SAML assertion er udstedt på baggrund af et OCES-certifikat. Indholdet er beskrevet i OIO-SAML-Profil.

Den udstedte OIO-SAML assertion er møntet på et enkelt audience (system) - ved kryptering sikres det, at det kun kan anvendes af det tilsigtede system. Dette token kan derfor betragtes som en "personlig billet" der giver en bruger adgang til et givet system.

En OIO-SAML assertion (og dermed et NemLog-In token) udstedt på baggrund af OCES-certifikat indeholder følgende elementer:

  • Issuer. Den IdP (typisk NemLog-In) der har udstedt token.
  • Signature. Udsteders digitale signatur af det samlede token. Signaturen kan verificeres med udsteders offentlige nøgle.
  • Subject. Anvenders identitet. Ved udstedelse på baggrund af OCES-certifikat skal dette være certifikatets Distinguished Name.
  • Conditions. Beskriver gyldighed af token, herunder tidsperiode samt hvilket audience (aftagersystem) dette token er rettet mod. Token er krypteret med offentlig nøgle for aftagersystemet.
  • AuthnStatement. Beskriver hvordan anvenders identitet er bekræftet. I nærværende sammenhæng altid via X.509 (OCES) certifikat.
  • AttributeStatement. Indeholder et antal attributter (udsagn) omkring brugeren f.eks. navn, email og organisatoriske tilhørsforhold. Beskrevet nærmere nedenfor.

Attributter i et NemLog-In token

Et token indeholder en række attributter, hvoraf nogle er obligatorisk for alle OIO-SAML assertions, mens andre kun er relevante, hvis de er udstedt på baggrund af OCES-certifikater (som ifm. billetomveksling).

Attributter som er obligariske for alle OIO-SAML assertions:

  • oid:2.5.4.4 (surName). Brugerens efternavn.
  • oid:2.5.4.3 (commonname). Brugerens fulde navn.
  • oid:0.9.2342.19200300.100.1.1 (uid). Beskriver brugerens id i context af hans organisation. For assertions udstedt på baggrund af OCES-certifikater skal dette være certifikatets subjectSerialNumber (CVR-RID).
  • oid:0.9.2342.19200300.100.1.3 (email). Brugerens email-adresse.
  • AssuranceLevel. Angiver pålidelighed af data i henhold til Vejledning vedrørende niveauer af autenticitetssikring, typisk 3 eller 4.
  • SpecVer. Beskriver OIO-SAML version, pt. DK-SAML-2.0

For assertions udstedt på baggrund af OCES-certifikater er yderligere en række attributter obligatoriske:

  • oid:2.5.4.5 (serialNumber). Serienummer på brugerens OCES-certifikat.
  • oid:2.5.29.29 (certifikat udsteder). Udsteder af certifikatet. Enten rodcertifikatet eller et underliggende krydscertifikat. Sammen med serienummer identificerer dette certifikatet unikt.
  • oid:2.5.4.10 (organizationName). Brugerens organisation. Obligatorisk ved VOCES/MOCES certifikat.
  • IsYouthCer. Angivelse af om det er et særligt ungdomscertifikat udstedt til personer i alderen 15-18 år, som kan identificere brugeren men ikke anvendes til juridisk bindende aftaler.
  • CvrNumberIdentifier. CVR-nummer for brugerens organisation. Obligatorisk ved MOCES/VOCES certifikat.
  • RidNumberIdentifier. Obligatorisk ved MOCES-certifikat og hentet herfra.

OIO-SAML beskriver yderligere nogle relevante attributter, som ikke er obligatoriske:

  • oid:1.3.6.1.4.1.1466.115.121.1.8 (userCertificate). Det certifikat der er baggrund for udstedelse af token. Optionelt, men er indeholdt i NemLog-In tokens og kræves af STS billetomveksling.
  • CprNumberIdentifier. Brugerens CPR-nummer. Optionelt og kun tilladt under visse omstændigheder (bl.a. at aftager skal være en offentlig instans).

SOSI Id-kort

I modsætning til de generelle OIO-SAML assertions udstedt af NemLog-In, er et SOSI id-kort skræddersyet til anvendelse i fagsystemer indenfor sundhedsvæsenet. Der er nogle væsentlige forskelle mellem SOSI id-kort og OIO-SAML tokens:

  • Det samme SOSI id-kort kan være adgangsgivende til flere services fra flere kaldende it-systemer, hvorimod en OIO-SAML assertion kun kan anvendes til et enkelt modtagende system.
  • Et SOSI id-kort indeholder typisk enkelte sundhedsspecifikke attributter som f.eks. et autorisationsnummer, der kan anvendes af modtagende it-systemer.
  • Et SOSI id-kort anvendes til at tilgå webservices mens en OIO-SAML assertion anvendes af webapplikationer (men kan indeholde et bootstrap token der kan veksles til adgangsbilletter til webservices).
  • Et SOSI id-kort er et eksempel på en SAML assertion men opfylder ikke betingelserne i henhold til OIO-SAML profilen, og er derfor ikke en OIO-SAML assertion.

STS billetomveksling kan anvendes til at veksle mellem de to slags tokens. Det muliggør at autentifikation (udstedelse af id-kort) overfor STS'en kan omveksles til adgang til systemer indenfor NemLog-In føderationen som f.eks. sundhed.dk.

Opbygning

Id-kortet er det bærende element ifm. signering i STS'en. Som beskrevet i platformsintroduktionen er id-kortet et XML-dokument der indeholder informationer om den person, virksomhed eller applikation, som foretager en forespørgsel mod en NSP-service. Når man ombytter et id-kort i STS'en, placeres id-kortet under SOAP Body elementet. Når man medsender et id-kort ifm. kald af NSP-services placeres det under SOAP Header elementet.

Gliffy Diagram
size600
nameId card in header and body
pageid92754297


Attributter

Et id-kort består af en mængde attributter som anvendersystemet udfylder. En del af disse attributter bliver verificeret af STS, og nogle bliver valideret af komponenterne. Verifikationen i STS gennemgås i næste hovedafsnit.

  • Navn: En identifikation af den person/organisation som id-kortet skal repræsentere. Hvis der ikke angives et navn anvender Seal enten brugerens CPR-nummer eller organisationens id.
  • Id: Et internt, unikt id, der genereres af Seal.
  • Oprettet: Det tidspunkt id-kortet er oprettet og derved gyldigt fra.
  • Udløber: Det tidspunkt id-kortet udløber.
  • Udsteder: Navnet på den instans, der har udstedt id-kortet. Hver STS-service har sin egen streng. Det er det muligt for anvendere at angive denne, når der genereres et id-kort.
  • Autentifikationsniveau: Ved brug af STS er der kun to valide muligheder for autentifikationsniveau; 3 hvis der er tale om et systemid-kort signeret med et VOCES-certifikat eller FOCES-certikat, eller 4, hvis der er tale om et brugerid-kort signeret med et MOCES-certifikat.
  • Organisation: Navnet, typen og et id for den organisatoriske enhed som id-kortet repræsenterer. Typen kan være CVR-nummer, en SKS-kode, et yder-nummer eller et p-nummer (Produktionsenhedsnummer).
  • IT System: Navnet på det system der initierede forespørgslen. Dette er en fritekst, der kan indsættes af anvendersystemet og vil blive bevaret i det STS signerede id-kort. I nogle tilfælde bruges denne værdi af NSP-komponenter. F.eks. bruges værdien af NAS til at identificere et Pullpoint.

Hvis der er tale om et brugerid-kort er følgende attributter også tilstede

  • Bruger: CPR-nummeret, fulde navn og email-adresse på den person som id-kortet repræsenterer.
  • Rolle: Den firecifrede uddannelseskode som brugerens autorisation har. Koderne i autorisationsregistret er et subset af uddannelseskoderne fra Danmarks Statistik. Som eksempel kan nævnes at uddannelseskoden 7170 bruges for læger og 5166 bruges for sygeplejersker.
  • Autorisationsid: Det autorisationsID som brugerens autorisation har. En anvender har en eller flere autorisationer, hvert med et unikt ID og en uddannelseskode.
  • Ansættelse: Den ansættelse i organisationen som brugeren har. Denne værdi er en fritekst og bevares i det STS-signerede id-kort.

Certifikat og signatur

Når et id-kort signeres, enten af anvenderen eller af STS, bliver certifikatets offentlige nøgle lagt ind på id-kortet og kortet signeres med certifikatets private nøgle. Seal-bibliotekerne udfører disse opgaver for een. Hvis man ønsker at vide hvordan det praktisk foregår, så er hele processen beskrevet i "Den Gode Webservice" [DGWS].

Billetomveksling

NemLog-In token til id-kort

STS kan anvendes til omveksling af særlige OIO-SAML assertions til et ækvivalent id-kort der kan anvendes til at få adgang til NSP-platformen. Visse oplysninger fremgår af et SOSI id-kort men ikke af et NemLog-In token. Disse skal derfor angives eksplicit i forespørgslen som supplerende information, i det omfang de ikke automatisk kan fastlægges.

Omveksling kræver:

  • Det skal være en OIO-SAML assertion udstedt og signeret af en IdP som STS'en stoler på. Dette betyder i praksis NemLog-In.
  • Det skal være et OIO-SAML token udstedt på baggrund af et MOCES-certifikat.
  • Det skal have AssuranceLevel 3 eller 4 (opfyldt for tokens udstedt på baggrund af OCES-certifikat).
  • Medarbejderens CPR-nummer skal enten være angivet i forespørgslen eller kunne bestemmes ud fra certifikatet.
  • Autorisationsnummer og uddannelseskode skal enten være angivet i forespørgslen eller kunne bestemmes entydigt (ud fra CPR-nummer og autorisationsregister).
  • It-system-navn skal være angivet i forespørgslen da dette ikke indgår i et NemLog-In token.

Herudover kan man vælge at medsende brugerens fornavn/efternavn i forespørgslen, idet fornavnet ikke kan bestemmes ud fra en OIO-SAML assertion.

Såfremt omvekslingen går godt, vil slutresultatet være et STS-signeret id-kort med oplysninger sammensat fra NemLog-In token, supplerende info og opslag, som herefter kan benyttes som adgangsbillet til NSP-platformens services.

Validering af signaturer

STS'en verificerer at forespørgslen er signeret med et gyldigt certifikat (ikke udløbet, ikke spærret), som er udstedt af rodcertifikatet (eller af et af krydscertifikaterne).

STS'en verificerer at den indeholdte OIO-SAML assertion er signeret med et gyldigt certifikat (ikke udløbet, ikke spærret), som er udstedt af rodcertifikatet (eller af et af krydscertifikaterne). Herudover skal det være et certifikat som STS'en stoler på. STS'en er derfor konfigureret med trust af en eller flere kilder. I produktion stoles i skrivende stund alene på NemLog-In.

Håndtering af CPR-nummer

Brugerens CPR-nummer er valgfrit i en OIO-SAML assertion. Såfremt dette er medsendt, valideres korrektheden ved opslag ud fra det medsendte CvrRid. Alternativt vil det blive fremsøgt. Herved sikres at det returnerede id-kort altid indeholder et CPR-nummer, hvis ægthed er bekræftet.

Håndtering af autorisationsnummer og uddannelseskode

Hvis brugeren har en autorisation i henhold til autorisationsregisteret, skal denne være beskrevet i et STS-signeret id-kort med autorisationsnummer og uddannelseskode. Disse er ikke indeholdt i en OIO-SAML assertion, men kan være medsendt som supplerende information i billetomvekslingsforespørgslen.

Disse håndteres på følgende måde:

  • Hvis både autorisationsnummer og uddannelseskode er medsendt, verificeres disse via autorisationsregisteret og indsættes i det returnerede id-kort.
  • Hvis enten autorisationsnummer eller uddannelseskode er medsendt, verificeres at dette matcher præcis én autorisation i autorisationsregisteret, og denne indsættes i det returnerede id-kort.
  • Hvis hverken autorisationsnummer eller uddannelseskode er medsendt, verificeres at brugeren har præcis én autorisation i autorisationsregisteret, og denne indsættes i det returnerede id-kort.

Det er den samme algoritme, der anvendes ved signering.

Id-kort til OIO-SAML assertion.

STS tilbyder ligeledes omveksling af id-kort til OIO-SAML assertions rettet mod udvalgte it-systemer. I forespørgslen angives:

  • Et gyldigt STS-signeret id-kort niveau 3 eller 4 (dvs. baseret på et MOCES-, VOCES- eller FOCES-certifikat).
  • Et audience, dvs. navnet på den webaplikation, som det udstedte token skal gælde for.

Det angivne audience skal være kendt af STS'en. STS'en vil kvittere med en gyldig OIO-SAML assertion signeret af STS og rettet mod den angivne webapplikation. Denne assertion er baseret på oplysningerne i id-kortet, samt suppleret med information som STS er konfigureret med for den givne applikation.

Endvidere krypteres med webapplikationens offentlige nøgle, så token kun kan verificeres og anvendes til denne ene applikation. Det oprindelige id-kort medsendes evt. (afhænger af konfiguration) som en del af den returnerede assertion, så den webapplikation der kaldes har dermed direkte adgang til services på NSP-platformen uden at skulle foretage en omveksling.

Billetomvekslingen kan således anvendes af alle med adgang til NSP. Men kan kun veksle til en assertion som giver adgang til et system kendt og konfigureret i STS.

Konfiguration af audience i STS.

For at tilgå et tredjepartssystem (f.eks. sundhed.dk) via billetomveksling, skal dette være kendt af og konfigureret i STS. Konfigurationen omfatter:

  • navn på audience - benyttes som nøgle og er formatteret som en URI.
  • Certifikat for dette audience - benyttes til kryptering af det returnerede token, så kun dette audience kan aflæse informationen.
  • recipient - loginUrl hos den webapplikation som det returnerede token skal anvendes på.
  • includeBootstrapToken - angivelse af hvorvidt det fremsendte id-kort skal rummes i det returnerede token. Bemærk at en OIO-SAML assertion udstedt af STS ikke kan veksles tilbage til et id-kort. Med inkludering af bootstrap token bliver dette unødvendigt.
  • diverse tekniske attributter der benyttes til at beregne hvilken periode den returnerede OIO-SAML assertion vil være gyldig i.

Bemærk, at da det returnerede OIO-SAML token indeholder brugerens CPR-nummer sætter det visse juridiske begrænsninger (persondataloven) for hvilke webapplikationer det er muligt at konfigurere.

Anvendelse af billetomveksling

Billetomveksling kan anvendes af et fagsystem (f.eks. et EPJ-system), som allerede har et gyldigt id-kort for den aktuelle bruger, til at integrere med en fremmed webapplikation.

Integrationen foregår på følgende måde:

  • Fagsystemet ABC kalder billetomveksling med det STS-signerede id-kort samt angivelse af applikationen XYZ og signerer hele forespørgslen med eget certifikat.
  • STS validerer forespørgslens signatur, konstaterer at XYZ er et kendt audience, og returnerer en gyldig OIO-SAML assertion, signeret af STS og krypteret med XYZ's offentlige nøgle.
  • ABC åbner en browser på brugerens lokale PC som kalder en adresse (URL) hos fagsystemet.
  • Den kaldte adresse (URL) redirigerer herefter til XYZ med OIO-SAML assertion indlejret (typisk som en formular i et HTTP POST request).
  • XYZ dekrypterer assertion med egen private nøgle.
  • XYZ verificerer at OIO-SAML assertion er signeret af en troværdig IdP og betragter herved brugeren som autentificeret.

Gliffy Diagram
nameSikker browseropstart
pagePin1

Hele processen kræver således gensidigt kendskab og aftale mellem STS og den eksterne webapplikation XYX, idet

  1. STS skal kende den eksterne applikation og være konfigureret med bl.a. dennes offentlige nøgle
  2. XYZ skal kende til STS'en som en troværdig IdP og dermed stole på assertions signeret af STS.

Verifikation

Når STS'en modtager en signeringsforespørgsel verificeres id-kortet og anvenderens certificat i flere skridt. Disse skridt er kort beskrevet i de følgende afsnit, og er yderligere uddybet i STS dokumentationen. Verifikationen betyder at komponenter kan stole på korrektheden af de nævnte attributer, hvis id-kortet er signeret af STS'en.

Gyldighed

Et id-kort er kun gyldigt i en bestemt periode. STS'en tjekker derfor at denne periode er oplyst på id-kortet og at det indeholder kaldstidspunktet. Dette gøres for at sikre at man ikke kan udstede et id-kort, der først bliver gyldigt en gang ude i fremtiden.

Et id-kort kan maksimalt være gyldigt i 24 timer, derfor tjekker STS at den ønskede gyldighedsperioden ikke er længere end 24 timer.

Certifikat

Det certifikat, som anvender har brugt til at signere id-kortet i forespørgslen, skal være signeret af Nets DanID's rodcertifikatet (eller af et af krydscertifikaterne). Da der findes flere gyldige sæt af disse (test og produktion), er det vigtigt at anvender har styr på hvilket sæt den kaldende STS er en del af.

Spærrelister

Selv om et certifikat er korrekt udstedt til føderationen, kan det godt blive nægtet adgang. Dette sker ved hjælp af en såkaldt blackliste, der indeholder certifikater, der ikke længere må anvendes. Denne liste vedligeholdes som en del af certifikatinfrastrukturen og anvendes af STS til at afvise certifikater, der f.eks. er blevet kompromiteret eller på anden måde har mistet deres autoritet.

CVR-nummer

STS verificerer at det angivne CVR-nummer matcher det CVR-nummer, der er angivet i certifikatet.

Personnummer

Hvis forespørgslen indeholder et brugerid-kort tjekkes at det angivne personnummer matcher det personnummer, der blev brugt da medarbejdercertifikatet blev udstedt. Verifikationen anvender en ekstern webservice til at finde det personnummer der er knyttet til CVR/RID-nummeret i certifikatet. Hvis der ikke var tilknyttet er CPR-nummer til certifikatet ved udstedelse, så kan dette certifikat ikke bruges til at få et signeret id-kort.

Autorisation

Hvis forespørgslen indeholder et brugerid-kort, så laves der et opslag i autorisationsregisteret for at finde den autorisation, som brugeren anvender. Hvis der er angivet en rolle og/eller et autorisationsID i forespørgelsen, anvendes disse til at udvælge autorisationen. I "STS Anvender dokumentet" er udvælgelsesalgoritmen beskrevet i detaljer. Den følgende liste beskriver de gængse situationer med angivelse af autorisation. Disse situationer er også indeholdt i medfølgende eksempler.

  • En bruger med en autorisation: hvis en bruger kun har en autorisation kan denne angives eller helt undlades og dermed lade STS vælge den ene.
  • En bruger med flere autorisationer: anvendere skal her angive nok information for STS til at finde en entydig autorisation.
  • En bruger uden autorisationer: her skal anvendere undlade at angive en gyldig autorisation.

Den konkrete udformning af forespørgelsen til STS kan ses i eksemplerne.

Signering af id-kort

Adgang

TilgængeligKomponentversioner sts
Endpoint(s)

/sts/services/NewSecurityTokenService

/sts/services/SecurityTokenService

Beskrivelse af services

Udstedelse af STS-signeret id-kort.

Snitfladebeskrivelse og brug

Formålet med STS er at sikre identiteten af og autorisere brugere der ønsker at tilgå services inden for en føderation [SOSI] på sundhedsdatanettet.

Snitfladen SecurityTokenService er en legacy udgave af NewSecurityTokenService. I NewSecurityTokenService overskrives NameID/AlternativeIdentifier, hvilket vil sige at anvender ikke kan bestemme indholdet heraf.

Snitfladerne beskrives detaljeret her:
STS - Guide til anvendere - Signering af id-kort 

Medarbejder-Billetomveksling

Adgang

TilgængeligKomponentversioner sts
Endpoint(s)

/sts/services/OIOSaml2Sosi

/sts/services/Sosi2OIOSaml

/sts/services/JWT2OIOSaml

Beskrivelse af services

Kan veksle mellem OIOSaml (nem-login) token og signeret id-kort, hvor token skal være signeret af troværdig tredjepart (nemlogin).

Kan veksle fra JWT til OIOSAML, hvor JWT er udstedet og signeret af en OpenID connect server.

Ombytter STS-signeret id-kort eller JSON Web Token til OIOSaml-token rettet mod et specifikt audience, f.eks. sundhed.dk eller forløbsplaner.dk.

Snitfladebeskrivelse og brug

Formålet med omvekslingen er:

At tillade web-løsninger, hvis anvendere er logget på via NemLog-in anvendere af NemLogin at kalde foretage DGWS-kald, som kræver SOSI id-kort, ved at veksle en eksisterende OIOSAML-assertion udstedt af NemLog-intil et id-kort, som efterfølgende kan anvendes til opslag af webservices hos f.eks. NSP eller FMK.

At tillade anvendere af id-kort at foretage kald i NemLogin federationen, som kræver OIOSAML assertions, ved at veksle et eksisterende id-kort til et OIOSAML-assertion.

At tilbyde borgeren login-funktionalitet via en OpenID connect server, hvor et såkaldt JSON Web Token (JWT) udstedt til borgeren og signeret af OpenID serveren herefter kan veksles til

Snitflade OIOSaml2Sosi beskrives detaljeret her:
STS - Guide til anvendere - Medarbejder-Billetomveksling til signeret id-kort

Snitflade Sosi2OIOSaml og  JWT2OIOSaml beskrives detaljeret her:

STS - Guide til anvendere - Medarbejder-Billetomveksling til OIOSAML

Borger-Billetomveksling

Adgang

TilgængeligKomponentversioner sts
Endpoint(s)

/sts/services/Bst2Idws

/sts/services/JWT2Idws

Beskrivelse af services

Ombytter OIOSaml bootstrap token eller JWT til signeret identitytoken rettet mod et givet audience, f.eks. FMK. Token skal være signeret af troværdig tredjepart (nem-login)

Snitfladebeskrivelse og brug

Formålet med omvekslingen er:

At tillade web-løsninger, hvis anvendere er logget på via NemLog-in, at kalde foretage IDWS-kald, som kræver IDWS identitytoken, ved at veksle en eksisterende OIOSAML- eller JWT-asserteion udstedt af NemLog-in til et identitytoken, som efterfølgende kan anvendes til opslag af webservices hos f.eks. FSK eller FMK.

At tillade anvendere af identitytoken at foretage kald i NemLogin federationen, som kræver OIOSAML assertions, ved at veksle et eksisterende identitytoken til et OIOSAML-assertion.

At tilbyde borgeren login-funktionalitet via en OpenID connect server, hvor et såkaldt JSON Web Token (JWT) udstedt til borgeren og signeret af OpenID serveren herefter kan veksles til

Snitflade OIOSaml2Sosi beskrives detaljeret her:
STS - Guide til anvendere - Borger-Billetomveksling til IDWS

Fejlbeskeder

Behandling af forespørgsel

Ved behandling af en forespørgsel om udstedelse af ID-kort hos en STS gennemgås en række skridt. Forløbet er skitseretforsimplet nedenfor, med de skridt der har primær relevans i forhold til diagnosticering af udstedelse. Hvert skridt kan føre til en afvisning af forespørgslen, mens succesfuld verifikation leder til signering og dermed udstedelse af et ID-kort.

Verificeret forespørgsel

Ved succesfuld udstedelse af et STS signeret ID-kort returneres et SOAP svar fra STS indeholdende relevante ID-kort attributter(SAML assertions), dvs. både verificerede (f.eks CVR) og berigede (f.eks. CPR), samt øvrig information jævnfør DGWS.


Code Block
languagexml
collapsetrue
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...="...">
  <soapenv:Header>
    <wsse:Security id="AAABL0ncNMXd26QUzOR4JlNPU0k=">
      <wsu:Timestamp>
        <wsu:Created>2011-04-12T15:17:41</wsu:Created>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <wst:RequestSecurityTokenResponse Context="www.sosi.dk">
      <wst:TokenType>urn:oasis:names:tc:SAML:2.0:assertion:</wst:TokenType>
      <wst:RequestedSecurityToken>...</wst:RequestedSecurityToken>
      <wst:Status>
        <wst:Code>http://schemas.xmlsoap.org/ws/2005/02/trust/status/valid</wst:Code>
      </wst:Status>
      <wst:Issuer>
        <wsa:Address>TESTSTS</wsa:Address>
      </wst:Issuer>
    </wst:RequestSecurityTokenResponse>
  </soapenv:Body>
</soapenv:Envelope>

Ovenstående eksempel viser en del af et svar indeholdende et STS signeret ID-kort. I eksemplet er namespace erklæringer samtalle ID-kort attributter fjernet af hensyn til overskuelighed. Vigtige elementer ved diagnosticering er:

  • wsu:Timestamp: Tidspunkt for udstedelse
  • wst:RequestSecurityTokenResponse: Findes altid for succesfuldt udstedte ID-kort
  • wst:RequestedSecurityToken: Indeholder ID-kortets attributter
  • wst:Status: Indeholder status for ID-kortet (WS-Trust)
  • wst:Issuer: Viser hvilken STS (føderation) ID-kortet er udstedt af


Afvist forespørgsel

På tilsvarende vis leverer en STS ved afvist forespørgsel et SOAP svar (Fault) indeholdende yderligere information om fejlen.  Nedenstående eksempel viser (igen uden namespace erklæringer) elementerne i svaret der bruges i forbindelse med diagnosticer-ing:

  • wsu:Timestamp: Tidspunkt for behandling
  • faultcode: Kategorisering af årsag til afvisning
  • faultactor: Information om afvisningens oprindelse
  • faultstring: Kort beskrivelse af årsagen til afvisningen

Det er kombinationen affaultcode, faultactor og faultstring som identificerer fejlen, hvor faultstring typisk indeholder den nødvendige information for nærmere fejlsøgning.

Faultcode værdier faultcode skal ikke betragtes som entydige fejlkoder, men skal ses i sammenhæng og bør betragtes som en gruppering af de fejltyper der kan opstå ved behandling af kald til tjenester på en STS:

  • wst:InvalidRequest
  • wst:FailedAuthentication
  • wst:RequestFailed
  • wst:AuthenticationBadElements
  • wst:BadRequest
  • wst:InvalidTimeRange

FAULTACTOR VÆRDIER

  • dk:sosi:sts: Fejl ved behandling af ID-kort udstedelse
  • dk:sosi:sts:its: Fejl ved veksling af SAML token identity token
  • dk:sosi:sts:nbo: Fejl ved billetomveksling
  • dk:sosi:sts:seal: Fejl ved håndtering af ID-kort, f.eks. verifikation af signatur og serialisering/deserialisering
  • dk:sosi:sts:cvrridcpr: Fejl ved opslag i RID-CPR tjeneste eller brug af resultatet fra opslaget
  • dk:sosi:sts:autorisation: Fejl ved opslag i autorisationsregister eller brug af resultatet fra opslaget



Code Block
languagexml
collapsetrue
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...="...">
  <soapenv:Header>
    <wsse:Security id="">
      <wsu:Timestamp>
        <wsu:Created>2011-04-12T15:17:39</wsu:Created>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>wst:InvalidRequest</faultcode>
      <faultstring>The request was invalid or malformed</faultstring>
      <faultactor>dk:sosi:sts</faultactor>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

Detaljer i fejltekster

Ved nogle fejl kan faultstring indeholde dynamiske informationer som f.eks. autorisationskoder mv. Disse informationer kan anvendes af det kaldende system hvis systemet ikke selv har mulighed for at slå informationerne op i f.eks. Stamdatakomponenten. Det skal bemærkes at en fremtidig opdatering af DGWS eller en overgang til en anden standard kan betyde at disse informationer ikke længere er inkluderet i faultstring.

Test

Testdata

I modulet common ligger et antal Java Keystore filer der hver indeholder et enkelt certifikat. På testmiljøerne er nogle af disse certifikater knyttet til et antal autorisationer, således at eksemplerne kan vise forskellige anvendelser af STS'en.Medarbejdercertifikater

Funktionscertifikater

Statens_Serum_Institut_FOCES.jksCVR:46837428-FID:92421325

Virksomhedscertifikater

Statens_Serum_Institut_VOCES.jksCVR:46837428-UID:27910135

Medarbejdercertifikater

KeystorefilCVR-RIDCPRAutorisationsnummerUddannelseskode
Brian_Larsen_Laege.jksCVR:46837428-RID:114754151205691235NS3657170
Brian_Moeller_Laege.jksCVR:46837428-RID:567716681103811325

Karl_Hoffmann_Svendsen_Laege.jksCVR:46837428-RID:342085990102732379NS3627170
Sonja_Bach_Laege.jksCVR:46837428-RID:837010090309691444NS3637170
Sonja_Bach_Laege.jksCVR:46837428-RID:837010090309691444NS3645166

Øvrige certifikater

KeystorefilBeskrivelse
audience-certificate.jksIndeholder privat nøgle svarende til det audience der er konfigureret med navnet //sundhed.dk - og kan derfor anvendes til dekryptering
test-trusted-IdP.jksIndeholder privat nøgle for et certifikat som STS'en stoler på. Dermed er STS i stand til at veksle tokens signeret med denne private nøgle.

Snitfladebeskrivelse og brug

Formålet med omvekslingen er:

At tillade web-løsninger, hvis anvendere er logget på via NemLog-in anvendere af NemLogin at kalde foretage DGWS-kald, som kræver SOSI id-kort, ved at veksle en eksisterende OIOSAML-assertion udstedt af NemLog-intil et id-kort, som efterfølgende kan anvendes til opslag af webservices hos f.eks. NSP eller FMK.

At tillade anvendere af id-kort at foretage kald i NemLogin federationen, som kræver OIOSAML assertions, ved at veksle et eksisterende id-kort til et OIOSAML-assertion.

At tilbyde borgeren login-funktionalitet via en OpenID connect server, hvor et såkaldt JSON Web Token (JWT) udstedt til borgeren og signeret af OpenID serveren herefter kan veksles til

Snitflade OIOSaml2Sosi beskrives detaljeret her:
STS - Guide til anvendere - Medarbejder-Billetomveksling til signeret id-kort

Snitflade Sosi2OIOSaml og  JWT2OIOSaml beskrives detaljeret her:

STS - Guide til anvendere - Medarbejder-Billetomveksling til OIOSAML

Borger-Billetomveksling

Adgang

...

/sts/services/Bst2Idws

/sts/services/JWT2Idws

...

Ombytter OIOSaml bootstrap token eller JWT til signeret identitytoken rettet mod et givet audience, f.eks. FMK. Token skal være signeret af troværdig tredjepart (nem-login)

Snitfladebeskrivelse og brug

Formålet med omvekslingen er:

At tillade web-løsninger, hvis anvendere er logget på via NemLog-in, at kalde foretage IDWS-kald, som kræver IDWS identitytoken, ved at veksle en eksisterende OIOSAML- eller JWT-asserteion udstedt af NemLog-in til et identitytoken, som efterfølgende kan anvendes til opslag af webservices hos f.eks. FSK eller FMK.

At tillade anvendere af identitytoken at foretage kald i NemLogin federationen, som kræver OIOSAML assertions, ved at veksle et eksisterende identitytoken til et OIOSAML-assertion.

At tilbyde borgeren login-funktionalitet via en OpenID connect server, hvor et såkaldt JSON Web Token (JWT) udstedt til borgeren og signeret af OpenID serveren herefter kan veksles til

Snitflade OIOSaml2Sosi beskrives detaljeret her:
STS - Guide til anvendere - Borger-Billetomveksling til IDWS

Fejlbeskeder

Behandling af forespørgsel

Ved behandling af en forespørgsel om udstedelse af ID-kort hos en STS gennemgås en række skridt. Forløbet er skitseretforsimplet nedenfor, med de skridt der har primær relevans i forhold til diagnosticering af udstedelse. Hvert skridt kan føre til en afvisning af forespørgslen, mens succesfuld verifikation leder til signering og dermed udstedelse af et ID-kort.

Verificeret forespørgsel

Ved succesfuld udstedelse af et STS signeret ID-kort returneres et SOAP svar fra STS indeholdende relevante ID-kort attributter(SAML assertions), dvs. både verificerede (f.eks CVR) og berigede (f.eks. CPR), samt øvrig information jævnfør DGWS.

Code Block
languagexml
collapsetrue
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...="...">
  <soapenv:Header>
    <wsse:Security id="AAABL0ncNMXd26QUzOR4JlNPU0k=">
      <wsu:Timestamp>
        <wsu:Created>2011-04-12T15:17:41</wsu:Created>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <wst:RequestSecurityTokenResponse Context="www.sosi.dk">
      <wst:TokenType>urn:oasis:names:tc:SAML:2.0:assertion:</wst:TokenType>
      <wst:RequestedSecurityToken>...</wst:RequestedSecurityToken>
      <wst:Status>
        <wst:Code>http://schemas.xmlsoap.org/ws/2005/02/trust/status/valid</wst:Code>
      </wst:Status>
      <wst:Issuer>
        <wsa:Address>TESTSTS</wsa:Address>
      </wst:Issuer>
    </wst:RequestSecurityTokenResponse>
  </soapenv:Body>
</soapenv:Envelope>

Ovenstående eksempel viser en del af et svar indeholdende et STS signeret ID-kort. I eksemplet er namespace erklæringer samtalle ID-kort attributter fjernet af hensyn til overskuelighed. Vigtige elementer ved diagnosticering er:

  • wsu:Timestamp: Tidspunkt for udstedelse
  • wst:RequestSecurityTokenResponse: Findes altid for succesfuldt udstedte ID-kort
  • wst:RequestedSecurityToken: Indeholder ID-kortets attributter
  • wst:Status: Indeholder status for ID-kortet (WS-Trust)
  • wst:Issuer: Viser hvilken STS (føderation) ID-kortet er udstedt af

Afvist forespørgsel

På tilsvarende vis leverer en STS ved afvist forespørgsel et SOAP svar (Fault) indeholdende yderligere information om fejlen.  Nedenstående eksempel viser (igen uden namespace erklæringer) elementerne i svaret der bruges i forbindelse med diagnosticer-ing:

  • wsu:Timestamp: Tidspunkt for behandling
  • faultcode: Kategorisering af årsag til afvisning
  • faultactor: Information om afvisningens oprindelse
  • faultstring: Kort beskrivelse af årsagen til afvisningen

Det er kombinationen affaultcode, faultactor og faultstring som identificerer fejlen, hvor faultstring typisk indeholder den nødvendige information for nærmere fejlsøgning.

Faultcode værdier faultcode skal ikke betragtes som entydige fejlkoder, men skal ses i sammenhæng og bør betragtes som en gruppering af de fejltyper der kan opstå ved behandling af kald til tjenester på en STS:

  • wst:InvalidRequest
  • wst:FailedAuthentication
  • wst:RequestFailed
  • wst:AuthenticationBadElements
  • wst:BadRequest
  • wst:InvalidTimeRange

FAULTACTOR VÆRDIER

  • dk:sosi:sts: Fejl ved behandling af ID-kort udstedelse
  • dk:sosi:sts:its: Fejl ved veksling af SAML token identity token
  • dk:sosi:sts:nbo: Fejl ved billetomveksling
  • dk:sosi:sts:seal: Fejl ved håndtering af ID-kort, f.eks. verifikation af signatur og serialisering/deserialisering
  • dk:sosi:sts:cvrridcpr: Fejl ved opslag i RID-CPR tjeneste eller brug af resultatet fra opslaget
  • dk:sosi:sts:autorisation: Fejl ved opslag i autorisationsregister eller brug af resultatet fra opslaget
Code Block
languagexml
collapsetrue
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope ...="...">
  <soapenv:Header>
    <wsse:Security id="">
      <wsu:Timestamp>
        <wsu:Created>2011-04-12T15:17:39</wsu:Created>
      </wsu:Timestamp>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>wst:InvalidRequest</faultcode>
      <faultstring>The request was invalid or malformed</faultstring>
      <faultactor>dk:sosi:sts</faultactor>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

Detaljer i fejltekster

Ved nogle fejl kan faultstring indeholde dynamiske informationer som f.eks. autorisationskoder mv. Disse informationer kan anvendes af det kaldende system hvis systemet ikke selv har mulighed for at slå informationerne op i f.eks. Stamdatakomponenten. Det skal bemærkes at en fremtidig opdatering af DGWS eller en overgang til en anden standard kan betyde at disse informationer ikke længere er inkluderet i faultstring.

Test

Testdata

I modulet common ligger et antal Java Keystore filer der hver indeholder et enkelt certifikat. På testmiljøerne er nogle af disse certifikater knyttet til et antal autorisationer, således at eksemplerne kan vise forskellige anvendelser af STS'en.Medarbejdercertifikater

Funktionscertifikater

...

Virksomhedscertifikater

Statens_Serum_Institut_VOCES.jksCVR:46837428-UID:27910135