Denne vejledning er målrettet fagsystemsleverandører til mindre sundhedsorganisationer (eksempelvis lægepraksis og apoteker), som ved overgangen til MitID vælger:
De mindre organisationer har hidtil anvendt medarbejdersignatur (MOCES2) som autentifikationsmiddel.
I en begrænset overgangsperiode kan de mindre organisationer anvende MOCES3 som autentifikationsmiddel. Men MOCES3 har en række begrænsninger i forhold til MOCES2, hvilket gør MOCES3 mindre attraktiv for mindre organisationer.
Store organisationer indenfor sundhedsområdet (regioner og kommuner) forventes at etablere egne NSIS registrerede IdP'er, som giver mulighed for at udstede egne identifikationsmidler til organisationens medarbejdere. Etableringsomkostningerne ved denne model er høje og giver derfor primært mening for større organisationer.
Ovenstående gør at mindre organisationer forventes at anvende MitID Erhverv og login via NemLog-in.
Denne vejledning kommer ikke ind på hvordan medarbejdere oprettes i MitID Erhverv. Information vedrørende dette findes på NemLog-in migreringsportalen.
Vejledning har fokus på, hvordan et fagsystem tilslutter sig til den Nationale Sundhedsføderation (SEB og SOSI STS).
Figuren nedenfor illustrerer flowet og de enkelte trin beskrives under figuren.
Med SOSI idkortet kan fagsystemet lave et Den Gode WebService (DGWS) kald til sundhedstjenesten, og sundhedstjenesten kan returnere de ønskede patientdata til fagsystemet.
Ovenstående flow er nødvendig når medarbejderen skal tilgå patientdata fra en national sundhedstjeneste. Flowet er ikke nødvendig i forbindelse med medarbejderens initiale login til fagsystemet, og så længe medarbejderen via fagsystemet ikke tilgår patientdata fra en national sundhedstjeneste. I det OIOSAML-H-3.0 token, der returneres i step 4 til fagsystemet, kan medarbejderens identitet aflæses og anvendes i en brugerkonto-mapning mod fagsystemets interne brugerregister.
Som beskrevet ovenfor så initieres SEB via SAML WEB-SSO protokollen, og forudsætter en web-server i tilknytning til fagsystemet, samt at medarbejderen har adgang til en browser.
En webserver integreres til SEB via gennemførelse af følgende trin.
For mere information - se Integration til SEB.
Der skal indgås en tilslutningsaftale for adgang til SEB IdP. Kontakt SEB driftsforvaltningen på SEBDRIFT@sundhedsdata.dk.
Efter medarbejderens succesfulde login returnerer SEB et OIOSAML-H-3.0 token til web-serveren i tilknytning til fagsystemet.
Web-serveren skal validere OIOSAML-H.3.0 tokenet for gyldig signatur, trust til signatur og gyldighed i tid. Dette håndteres af standard SAML biblioteker og bør ikke kræve udvikling af applikationsspecifik kode.
OIOSAML-H-3.0 er et OIOSAML3 token udvidet med sundhedsattributter. Fra tokenet kan medarbejderens identitet og organisatoriske tilknytning aflæses (på CVR-niveau). Desuden kan medarbejderens sundhedsfaglige autorisationer, ydertilknytning og nationale sundhedsroller aflæses. Tokenet indeholder desuden et såkaldt Bootstraptoken, der kan anvendes til SOSI STS’ens nye BST2SOSI snitflade.
OIOSAML-H-3.0 profilen dokumenterer tokenets attributindhold.
I bilagsafsnittet nederst i nærværende vejledning ses et eksempel på et OIOSAML-H-3.0 token.
Det anbefales at nærstudere XML-elementet <AttributeStatement>, der indeholder information om:
BST er et såkaldt 'Audience restricted' 'Holder off key' token.
'Audience' er den part som skal validere og omveksle tokenet. Dvs. her er det SOSI STS'en.
'Holder of key' er den part som SEB udsteder token til. Dvs. her er det fagsystemet eller den tilknyttede web-server, som har initieret SAML WEB-SSO kaldet til SEB.
Afsnit '1.4.2 BST2SOSI billetomveksling' i vejledningen 'Snitfladeændringer i NSP-komponenter' viser et eksempel-BST, samt reguest og response fra BST2SOSI omvekslingskaldet.
WS-Trust SOAP kald til SOSI-STS'ens BST2SOSI snitflade er dokumenteret her: STS - Guide til anvendere: Medarbejderomvekslinger.
WS-Trust omvekslingen følger OIO Healthcare WS-Trust Profile v10.pdf.
Såvel Seal.java og Seal.NET bibliotekerne understøtte håndtering af bootstraptokens - jævnfør kode eksempler.
Vær opmærksom på at en medarbejder kan have flere autorisationer og flere nationale roller (se eksempel i bilags-afsnittet, hvor privilegesIntermediate attributten indeholder flere autorisationer og nationale roller). I det udstedte SOSI IdKort kan der kun indgå én autorisation eller én national rolle. Som parameter til BST2SOSI kan der medsendes et 'claim' på den autorisation eller rolle, der skal indgå i SOSI idkortet.
Fagsystemet skal realisere noget logik, der automatisk eller ud fra brugerinput bestemmer den autorisation eller national rolle, som skal opsættes i SOSI IdKortet. Dette kan undgås, hvis det sikres, at brugerne altid kun har én autorisation eller én nationale rolle.
Fagsystemets FOCES/VOCES-certifikat skal whitelistes til at må kalde SOSI-STS’ens BST2SOSI snitflade, dette gøres via henvendelse til NSP-ServiceDesk. Pt. understøttes både VOCES version 2 og 3 til whitelistning, men på sigt kun VOCES3.
I produktion foregår kommunikation med både SOSI-STS og sundhedsservicen (fx FMK) over Sundhedsdatanettet. Aftaler oprettes i gennem MedComs aftalesystem for Sundhedsdatanettet på https://aftale.medcom.dk/. Se også http://services.nsi.dk/sdn og http://medcom.dk/systemforvaltning/sundhedsdatanet-sdn
SOSI-idkortet kan benyttes til, at foretage service-kald til nationale services på medarbejderens vegne, der følger DenGodeWebService (DGWS).
Der henvises til den generelle dokumentation for DenGodeWebservice, samt service-udbydernes egen dokumentation af DGWS medarbejdersnitfladerne.
"..." er indsat de steder i eksemplet, hvor indholdet formateret som Base64.
<?xml version="1.0" encoding="UTF-8"?>
<Assertion ID="id4dc7177d3dc14383b4f2d6e6b125dcd9" IssueInstant="2022-09-14T10:53:26.804Z"
Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://t-seb.dkseb.dk/runtime/</Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="#id4dc7177d3dc14383b4f2d6e6b125dcd9">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>...</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>...</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>...</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
>79f30dae-e945-4c7b-941f-94cd4c7a3cf1</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id7970d754ae48499886d89d78cd862f84"
NotOnOrAfter="2022-09-14T10:58:26.804Z"
Recipient="https://t-seb.dkseb.dk/samlclaimapp11/login.ashx"/>
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2022-09-14T10:53:26.804Z" NotOnOrAfter="2022-09-14T11:53:26.804Z">
<AudienceRestriction>
<Audience>https://t-seb.dkseb.dk/samlclaimapp11/</Audience>
</AudienceRestriction>
</Conditions>
<AuthnStatement AuthnInstant="2022-09-14T10:53:26.804Z" SessionIndex="DxtYXLE2lmxJyfM2BuiX2A==">
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Unspecified</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
<AttributeStatement>
<Attribute Name="https://data.gov.dk/model/core/eid/cprUuid"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>f094778e-9b64-45a8-a254-d299dbde7614</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/professional/uuid/persistent"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>79f30dae-e945-4c7b-941f-94cd4c7a3cf1</AttributeValue>
</Attribute>
<Attribute Name="dk:gov:saml:attribute:AssuranceLevel"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
<AttributeValue>3</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/privilegesIntermediate"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>...</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/bootstrapToken"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>...</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/fullName"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>Karl Kristensen</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/email"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>xxx@xxxxx.dk</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/cprNumber"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>231096xxxx</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/professional/cvr"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>25252525</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/professional/rid"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>85479288</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/eid/professional/orgName"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>Organisation X</AttributeValue>
</Attribute>
<Attribute Name="https://data.gov.dk/model/core/specVersion"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>OIO-SAML-3.0</AttributeValue>
</Attribute>
<Attribute Name="https://healthcare.data.gov.dk/model/core/specVersion"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<AttributeValue>OIOSAML-H-3.0</AttributeValue>
</Attribute>
</AttributeStatement>
</Assertion>
<?xml version="1.0" encoding="UTF-8"?>
<bpp:PrivilegeList xmlns:bpp="http://itst.dk/oiosaml/basic_privilege_profile"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PrivilegeGroup Scope="urn:dk:gov:saml:cvrNumberIdentifier:25450442">
<Privilege>urn:dk:healthcare:national-federation-role:SundAssistR1</Privilege>
<Privilege>urn:dk:healthcare:national-federation-role:PlejeAssR3</Privilege>
</PrivilegeGroup>
<PrivilegeGroup Scope="urn:dk:healthcare:saml:userAuthorization:National">
<Privilege>urn:dk:healthcare:saml:userAuthorization:AuthorizationCode:CLDSX:EducationCode:5265:EducationName:Kiropraktor</Privilege>
<Privilege>urn:dk:healthcare:saml:userAuthorization:AuthorizationCode:KQQ1F:EducationCode:7170:EducationName:Læge</Privilege>
</PrivilegeGroup>
<PrivilegeGroup Scope="urn:dk:healthcare:saml:yderNumberIdentifier:344123:regionCode:83">
<Privilege>urn:dk:healthcare:saml:yder:roleCode:42:roleName:Ansat</Privilege>
</PrivilegeGroup>
</bpp:PrivilegeList>
Den første PrivilegeGroup indenholder to nationale roller.
Den mellemste PrivilegeGroup indenholder to sundhedsfaglige autorisationer.
Den sidste PrivilegeGroup indenholder en yder-tilknytning.