Introduktion

Formål

Denne guide har som formål at give et overblik over STS.

Nærværende dokument henvender sig til nuværende og kommende brugere af STS (Security Token Service) og formålet med dokumentet er, at give hjælp til disse i arbejdet med integration mod STS. Dette sker ved en overordnet gennemgang af de udstillede services og beskrivelse af specifikke elementer, der er væsentlige for at opnå en basal forståelse på anvenderniveau. Gennemgangen kan være understøttet af ekstern dokumentation. STS og relaterede services udstilles som webservices og i produktion altid på sundhedsdatanettet, hvilket kræver separat tilslutning.

Begreber

AnvendersystemDet IT-system som anvender en STS snitflade
BrugerDen bruger som via et klient IT-system anvender STS
TrustHvem stoler vi på som signerende part på en indgående billet.
ModtagerHvilke systemer kan anvende den billet der udstedes af STS.
STS
Sundhedsdatanettet


Beskrivelse

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.

I dette afsnit beskrives de væsentlige faser, som eksisterer ifbm. behandlingen af en forespørgsel til STS. Undervejs vil de væsentlige begreber og elementer, der indgår i en forespørgsel være forklaret. Der henvises endvidere til yderligere dokumentation, hvor det er relevant, så helheden og meningen fremgår.

Grafisk fremstilling og sammenhængen

Arkitekturoverblik

Oversigt over snitflader STS

ServiceSikkerhedsniveauBeskrivelse
Signering
/sts/services/NewSecurityTokenServiceNiveau 3-4

Udstedelse af STS-signeret id-kort.

/sts/services/SecurityTokenServiceNiveau 3-4

Legacy udgave af ovennævnte service (uden erstatning af NameId). Benyt NewSecurityTokenService hvis muligt

Medarbejder-omveksling
/sts/services/Sosi2OIOSamlNiveau 4

Ombytter STS-signeret id-kort til OIOSaml-token rettet mod et specifikt audience, f.eks. sundhed.dk. Bemærk at dette id-kort skal være udstedt af /sts/services/NewSecurityTokenService

/sts/services/OIOSaml2SosiNiveau 5

Ombytter OIOSaml (nem-login) token til signeret id-kort. Token skal være signeret af troværdig tredjepart
(nemlogin)

/sts/services/JWT2OIOSamlNiveau 5Ombytter JSON Web token til OIOSaml-token rettet mod et specifikt audience, f.eks. forløbsplaner.dk
Borger-omveksling
/sts/services/Bst2IdwsNiveau 5

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

/sts/services/JWT2IdwsNiveau 5

Ombytter JSON Web token til signeret identity-token rettet mod et givet audience, f.eks. FMK. Token skal være signeret af troværdig tredjepart (pt. en OID connector)

Læsevejledning og forudsætninger

En typisk anvender af STS, som kan drage nytte af dette dokument er karakteriseret ved eksempelvis at være leverandør af et lægepraksissystem eller leverandør af et fagsystem implementeret på et hospital, f.eks. et laboratoriesystem eller et medicineringssystem.

Id-kort spiller en central rolle for single-signon scenariet, der understøttes af STS, og det er en absolut nødvendighed med en god forståelse af begreberne for at arbejde med STS. Id-kortet anvendes ifm. autentifikation og autorisation af en bruger, der opererer på sundhedsdatanettet via en serviceaftager.

Specifikationen af DGWS [DGWS] har en god og uddybende beskrivelse af, hvordan et id-kort er konstrueret og kan anvendes i praksis.

Definitioner og referencer

ReferenceBeskrivelse
DGWShttps://www.medcom.dk/standarder/webservice-standarder/den-gode-webservice
SOSIhttp://www.sosi.dk/twiki/bin/view/ProjectManagement/SOSITechExecutiveOverview


Dokument historik

DatoAnsvarligBeskrivelse
04/09-2020KIT

Sammenskrivning af oprindelige anvendergudier og yderligere informationer

STS begreber

Identitetsservice

Adgang til NSP-komponenters services er begrænset med autentificering. Denne autentifikation er baseret på OCES-certifikater, hvormed anvendere er i stand til at identificere sig. Det betyder dog ikke at alle services skal validere alle anvenderes certifikater og tilhørende information. Dette vil være et stort ansvar at fordele på så mange komponenter. Derfor er der en fælles komponent, som kan udstede adgangsgivende billetter, som kun kræver simpel verifikation. En sådan komponent betegnes generelt som en "Identitetsservice" eller IdP (IdentityProvider). På NSP hedder servicen Security Token Service (STS).

Introduktionen af STS betyder at en anvender udelukkende skal identificere sig overfor STS med sit OCES-certifikat og får herefter et id-kort, der er underskrevet med (STS) føderationens certifikat. Dette id-kort agerer som nøglen, der identificerer anvenderen, og kan give adgang til de andre komponenter på NSP. Komponenternes ansvar er derfor kun at kende til STS'ens ene certifikat og verificere dette i id-kortet. STS verificerer og beriger desuden id-kortet med en række af attributter. F.eks. verificeres slutbrugerens personnummer og dennes autorisation.

Føderation, ombytning af id-kort og servicekald

Følgende er et eksempel på hvad der sker i de forskellige skridt når en anvender ombytter sit id-kort til et signeret af STS:

  1. Anvendersystemet bygger et id-kort indeholdende informationer om brugeren/systemet og signerer det med brugerens/systemets certifikat.
  2. Id-kortet sendes til STS, der tjekker at signaturen er korrekt og baseret på et OCES-certifikat udstedt under det samme rodcertifikat som STS's eget.

  3. Korrektheden af attributter som personnummer og autorisation verificeres af STS. Ydermere tjekkes det om certifikatet er spærret for anvendelse.

  4. STS opbygger et nyt id-kort med de samme informationer og signerer det med STS'ens eget certifikat. Den offentlige nøgle i dette certifikat er kendt af alle komponenter i føderationen.
  5. STS sender det nye id-kort retur til anvendersystemet, der gemmer dette i brugerens/systemets session.
  6. Anvendersystemet indsætter nu det nye id-kort i headeren på alle fremtidige forespørgelser mod NSP-komponenter.
  7. NSP-komponenten verificerer at id-kortet er signeret af føderationens certifikat, og stoler herefter på udvalgte dele af id-kortet.


Bemærk at et id-kort kan anvendes til flere forespørgelser, så længe det endnu ikke er udløbet.

Offentlige Certifikater til Elektronisk Service

Til generel identifikation, dels som anvender overfor STS og dels for id-kortet overfor services på NSP, kræves digitale certifikater. På NSP skal disse overholde den fælles offentlige standard for certifikater. Standarden hedder OCES, Offentlige Certifikater til Elektronisk Service.

OCES-certifikater

OCES certifikater indeles i fire hovedgrupper, hvoraf de tre anvendes på NSP:

Den sidste gruppe af certifikater betegnes som Personcertifikater, og udstedes til identifikation af privatpersoner.

Digitaliseringsstyrelsen og Nets DanID

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.

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

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.

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.


<?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:


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:

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:

FAULTACTOR VÆRDIER



<?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