Versions Compared

Key

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

In dit hoofdstuk wordt de inhoud van het SAML transactietoken besproken die bij berichtauthenticatie met behulp van de UZI-pas/servercertificaat wordt gebruikt. Het SAML transactietoken bevat informatie over de toegepaste authenticatie en identificatie van de zorgverlener/medewerker/organisatie. Het SAML transactietoken is een op XML gebaseerd SAML assertion en heeft tot doel de assertions (bewijs van een bewering) over te brengen tussen partijen.

...

Element/@Attribute

0..1

Omschrijving

@ID

1

Unieke identificatie van de Assertion

@Version

1

Versie van het SAML Protocol. Vaste waarde moet zijn 2.0

@IssueInstant

1

Tijdstip van uitgifte van de Assertion.

Issuer

1

Bevat het OrganisatieID van de zendende applicatie.

@NameQualifier

0

Niet gebruiken

@SPNameQualifier

0

Niet gebruiken

@Format

1

Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"

@SPProviderID

0

Niet gebruiken

Signature

1

Bevat de handtekening over de assertion zoals gezet met behulp van de UZI pas van de zorgverlener (Z) of de UZI medewerkerpas (N) van de medewerker. De handtekening dient geplaatst te zijn met behulp van het authenticatie certificaat op de pas.
Alleen in het geval van een conditionele query maag de handetekening ook gezet worden met het servercertificaat (S) van de applicatie.

Subject

1

De zorgverlener/medewerker die zich authenticeert.

BaseID

0

Niet gebruiken

NameID

1

Bevat zowel de UZI van de geauthenticeerde zorgverlener/medewerker alsmede diens rolcode.
Alleen in het geval van de conditionele query mag dit veld leeggelaten worden.

EncryptedID

0

Niet gebruiken

SubjectConfirmation

1

Moet aanwezig zijn

@Method

1

'urn:oasis:names:tc:SAML:2.0:cm:holder-of-key'

SubjectConfirmationData

0

Niet gebruiken

@Recipient

0

Niet gebruiken

@NotOnOrAfter

0

Niet gebruiken

@InResponseTo

0

Niet gebruiken

@NotBefore

0

Niet gebruiken

@Address

0

Niet gebruiken

KeyInfo

1

Bevat de X509 Issuer.serial van de medewerkerspas of het servercertificaat

Conditions

1

Moet aanwezig zijn

@NotBefore

1

Moet aanwezig zijn.

@NotOnOrAfter

1

Moet aanwezig zijn. Mag maximaal 90 minuten na @NotBefore liggen.

Condition

0

Niet gebruiken

AudienceRestriction

1

Moet aanwezig zijn

Audience

1

urn:IIroot:2.16.840.1.113883.2.4.6.6:IIext:1 (is de ZIM)

ProxyRestriction

0

Niet gebruiken

Advice

0

Niet gebruiken

AuthnStatement

1

Moet aanwezig zijn

@AuthnInstant

1

Tijdstip van authenticatie van de gebruiker (Subject) of applicatie

@SessionIndex

0

Niet gebruiken

AuthnContext

1

Moet aanwezig zijn

AuthnContextClassRef

1

Ingeval van ondertekening met pas: urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI
Ingeval van ondertekening met servercertificaat: urn:oasis:names:tc:SAML:2.0:ac:classes:X509

AttributeStatement

1

Moet aanwezig zijn

Attribute

0..1

Moet aanwezig zijn indien bericht aan één patient is gerelateerd.

@Name

1

Vaste waarde: "burgerServiceNummer"

AttributeValue

0..1

Het BSN van de patient. .

Attribute

1

Moet aanwezig zijn

@Name

1

Vaste waarde: "messageIdRoot"

AttributeValue

1

De waarde van de messageIdRoot bijvoorbeeld:2.16.528.1.1007.3.3.1234567.1

Attribute

1

Moet aanwezig zijn

@Name

1

Vaste waarde: "messageIdExt"

AttributeValue

1

Het MessageId van het bericht..

Attribute

1

Moet aanwezig zijn

@Name

1

Vaste waarde: "InteractionId"

AttributeValue

1

Het InteractionId van het Bericht (het extension-element).

Attribute

0..1

Moet aanwezig zijn bij de Generieke Query

@Name

1

Vaste waarde: "contextCodeSystem"

AttributeValue

0..1

2.16.840.1.113883.2.4.3.111.15.1

Attribute

0..1

Moet aanwezig zijn bij de Generieke Query

@Name

1

Vaste waarde: "contextCode"

AttributeValue

0..1

De contextcode uit de Generieke query.

Attribute

0..1

Moet aanwezig zijn indien gebruik gemaakt is van een mandaat

@Name

1

Vaste waarde: "autorisatieregel/context"

AttributeValue

0..1

URI waar de autorisatieregel/context gevonden kan worden waarbinnen het mandaat gegeven wordt.

Attribute

0..1

Moet aanwezig zijn indien gebruikt wordt binnen AORTA infrastructuur

@Name

1

Vaste waarde: "applicationID"

AttributeValue

0..1

ApplicatieID van de applicatie

...

Bij het gebruik van de namespace-prefixes is het van belang deze na het ondertekenen niet meer te veranderen, dit maakt de digitale handtekening ongeldig.

Anchor
Inhoud
Inhoud
Inhoud

De volgende paragrafen beschrijven de verschillende kenmerken en beveiligingsgerelateerde gegevens die het SAML transactietoken onderscheiden, zoals in [IH tokens generiek] beschreven is.


Code Block
<saml:Assertion ... xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">

 

Het SAML transactietoken begint met het Assertion element en een verwijzing naar de XML SAML namespace voor SAML 2.0 assertions. De attributen behorende bij het Assertion element wordt in paragraaf 2.3.1 Uniekheid beschreven.





Anchor
Uniekheid
Uniekheid
Uniekheid


Code Block
ID="token_ dd1c1f96-f0b0-4026-a978-4d724c0a0a4f"

...



IssueInstant="2009-06-24T11:47:34Z"

...



Version="2.0">



De volgende attributen van het SAML assertion element maken van de SAML assertion een uniek gegeven, uitgegeven door de verzender van het bericht. Het attribuut ID identificeert op een unieke wijze de assertion. De assertion mag slechts eenmalig als token gebruikt worden. De waarde moet mondiaal uniek zijn voor AORTA berichten, zodat bij samenvoegen van meerdere XML bestanden (in een HL7v3 batch of anderszins) de waarde uniek blijft.

...


Het attribuut IssueInstant is een tijdsmoment van uitgifte van de SAML assertion. De tijdswaarde is gecodeerd in UTC. Het attribuut Version is de gebruikte SAML versie van de SAML assertion. De aanduiding voor de versie van SAML gedefinieerd in deze specificatie is "2.0".

Anchor
Afzender
Afzender
Afzender


Code Block
<saml:Issuer>

...



 <!-- De Issuer verwijst naar de organisatie van waaruit het totale bericht verstuurd wordt.-->

...



     urn:IIroot:2.16.528.1.1007.3.3:IIext:12345678

...



</saml:Issuer>



De URA wordt uitgedrukt met behulp van een URN (Uniform Resource Name). De URN is opgebouwd uit:

...

urn:IIroot:2.16.528.1.1007.3.3:IIext:12345678

Anchor
Onderwerp
Onderwerp
Onderwerp


Code Block
<saml:Subject>

...



  <saml:NameID>

...



   123456789:01.015

...



  </saml:NameID>

...



  <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:holder-of-key">

...



     <saml:SubjectConfirmationData>

...



       <saml:KeyInfo>

...



         <ds:X509Data>

...



           <ds:X509IssuerSerial>

...



             <ds:X509IssuerName>CN=...,...,O=...,C=NL</ds:X509IssuerName>

...



             <ds:X509SerialNumber>...834756977854956...</ds:X509SerialNumber>

...



            </ds:X509IssuerSerial>

...



          </ds:X509Data>

...



        </saml:KeyInfo>

...



      </saml:SubjectConfirmationData>

...



  </saml:SubjectConfirmation>

...



</saml:Subject>



De Subject verwijst naar de UZI van de zorgverlener/medewerker die de assertion heeft gegenereerd in combinatie met de rolcode van diezelfde zorgverlener/medewerker gescheiden door een dubbele punt (:).

...

Voor een beschrijving van de opbouw van de KeyInfo wordt verwezen naar hoofdstuk 4.4.3 Certificaatverwijzingen in document [IH tokens generiek].

Anchor
Geldigheid
Geldigheid
Geldigheid


Code Block
saml:Conditions

...



 NotBefore="2009-06-24T11:47:34Z"

...



 NotOnOrAfter="2009-06-24T11:52:34Z">


 

Het attribuut NotBefore is de tijd waarop de SAML assertion geldig wordt. Dit hoeft niet de tijd te zijn waarop het bericht is aangemaakt. Het is mogelijk NotBefore in de toekomst te zetten, en het bericht na deze tijd pas te verzenden.

...


Het inperken van bepaalde partijen (AudienceRestriction) waarvoor de assertion bedoeld is wordt beschreven in paragraaf 2.3.5 Ontvanger.
De subelementen OneTimeUse en ProxyRestriction worden niet gebruikt binnen het <Conditions> element bij berichtauthenticatie met behulp van de UZI-pas.

Anchor
Ontvanger
Ontvanger
Ontvanger


Code Block
<saml:AudienceRestriction>

...



  <!-- Root en extensie van de ZIM -->

...



  <saml:Audience>urn:IIroot:2.16.840.1.113883.2.4.6.6:IIext:1</saml:Audience>

...



</saml:AudienceRestriction>



In de AudienceRestriction wordt beschreven aan wie de SAML assertion is gericht. De waarden in de elementen zijn (voorlopig) vaste waarden. Voor de <Audience> parameter is (ook) gekozen voor URN, zie voor opbouw paragraaf 2.3.2 Afzender.

Anchor
Authenticatie
Authenticatie
Authenticatie


Code Block
<saml:AuthnStatement

...



 AuthnInstant="2009-06-24T11:47:34"

...



 SessionIndex="token_2.16.528.1.1007.3.3.1234567.1_0123456789">


 

Het subject, een zorgverlener of medewerker, in de SAML assertion is geauthenticeerd door middel van een authenticatiemiddel op een gegeven moment.



Code Block
<saml:AuthnContext>

...



  <saml:AuthnContextClassRef>

...



      urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI

...



  </saml:AuthnContextClassRef>

...



</saml:AuthnContext>



Als het transactietoken ondertekend is met het servercertificaat dan dient de AuthnContextClassRef de waarde urn:oasis:names:tc:SAML:2.0:ac:classes:X509 te krijgen .

...

Binnen de SAML-specificatie geeft men een authenticatie-context (AuthnContext) mee die de context van het gebruikte authenticatiemiddel aangeeft. Hiervoor zijn een aantal contexten gespecificeerd, zie [SAMLAuthnContext], die gebruikt worden als referentiekader voor de communicatie tussen de ZIM en andere componenten zoals GBZ applicaties.


Code Block
</saml:AuthnStatement>

Afsluiting authentication statement.

Anchor
Attributen
Attributen
Attributen

Code Block
<saml:AttributeStatement>


De volgende attributen zijn gegevens uit het HL7v3 bericht die met de authenticatie meegetekend worden. Dit zijn kopieën van gegevens die elders in hetzelfde HL7v3 bericht voorkomen. De volgorde van de attributen in het AttributeStatement is niet relevant. Er mogen geen andere attributen opgenomen worden in het AttributeStatement dan hier beschreven is.


InteractionId


Code Block
<saml:Attribute Name="interactionId">

...



  <saml:AttributeValue>QURX_IN990011NL</saml:AttributeValue>

...



</saml:Attribute>



Het attribuut interactionId wordt altijd meegetekend. De interactionId geeft een directe relatie met het berichttype. Dit attribuut meesturen verhindert veel soorten aanvallen, bijvoorbeeld het token van een query kapen en proberen deze te hergebruiken voor het afhandelen van verzoeken van patiënten en hun vertegenwoordigers om inzage te verkrijgen in de verwijsindex.


contextCode


Code Block
<saml:Attribute Name="contextCodeSystem">

...



  <saml:AttributeValue>2.16.840.1.113883.2.4.3.111.15.1</saml:AttributeValue>

...



</saml:Attribute>

...



<saml:Attribute Name="contextCode">

...



  <saml:AttributeValue>KZDI</saml:AttributeValue>

...



</saml:Attribute>



In het geval er sprake is van een opvraag op basis van een context dient ook de contextCode meegetekend te worden. Dit is in principe alleen het geval bij de generiekeQueryZorggegevens. Bij deze generieke query is het trigger event niet meer voldoende om de intentie van de verzender aan te geven, aangezien deze altijd gelijk is. Door het toevoegen van de contextCode wordt deze intentie wel weer expliciet gemaakt. De codes zijn te vinden in het vocab bestand 2.16.840.1.113883.2.4.3.111.15.1.xml.  


messageId


Code Block
<saml:Attribute Name="messageIdRoot">

...



  <saml:AttributeValue>2.16.528.1.1007.3.3.1234567.1</saml:AttributeValue>

...



</saml:Attribute>

...



<saml:Attribute Name="messageIdExt">

...



  <saml:AttributeValue>0123456789</saml:AttributeValue>

...



</saml:Attribute>



De Attributen messageIdRoot en messageIdExt vormen een uniek gegeven, uitgegeven door de verzender van het HL7v3-bericht. De combinatie van de attribuutwaarden messageIdRoot en messageIdExt moeten gelijk zijn aan het uiteindelijk gebruikte HL7v3 message.Id.


burgerServiceNummer


Code Block
<saml:Attribute Name="burgerServiceNummer">

...



  <saml:AttributeValue>950052413</saml:AttributeValue>

...



</saml:Attribute>


 

Voor berichten die betrekking hebben op een enkele patiënt, wordt het burgerServiceNummer (BSN) van de patiënt opgenomen. Dit maakt ook weer vele aanvallen onmogelijk, namelijk gegevens van een andere patiënt proberen op te vragen. Dit geldt voor alle berichten die betrekking hebben op één en niet meer dan één patiënt.

...

Alleen indien gebruik gemaakt wordt van een mandaat dient het volgende attribuut toegevoegd te worden:



Code Block
<saml:Attribute Name="autorisatieregel/context">

...



  <saml:

...

AttributeValue>https://goedbeheerdziekenhuis/autorisatieregels/medicatiecontext/v2 </saml:AttributeValue>

...



</saml:Attribute>



In het voorbeeld is voor een URL gekozen.

...

Indien het transactietoken gebruikt wordt binnen de AORTA infrastructuur is het applicatieID verplicht:



Code Block
<saml:Attribute Name="applicationID">

...



<!-- Applicatie-id van de GBZ-applicatie, zoals toegekend bij aansluiting.-->

...



<saml:AttributeValue>urn:IIroot:2.16.840.1.113883.2.4.6.6:IIext:? </saml:attributeValue>

...



</saml:Attribute>



Het applicatie-id van de afzender die deze SAML assertion heeft gecreëerd en de gebruiker authenticeert. De Issuer wordt uitgedrukt met behulp van een URN (Uniform Resource Name). De URN is opgebouwd uit:

...

Het attributen statement blok ziet er dan bijvoorbeeld zo uit (de volgorde van de attributen is niet relevant):



Code Block
<saml:AttributeStatement>

...



  <saml:Attribute Name="interactionId">

...



   <saml:AttributeValue>QURX_IN990011NL</saml:AttributeValue>

...



  </saml:Attribute>

...



  <saml:Attribute Name="messageIdRoot">

...



   <saml:AttributeValue>2.16.528.1.1007.3.3.1234567.1</saml:AttributeValue>

...



  </saml:Attribute>

...



  <saml:Attribute Name="messageIdExt">

...



   <saml:AttributeValue>0123456789</saml:AttributeValue>

...



  </saml:Attribute>

...



  <saml:Attribute Name="burgerServiceNummer">

...



   <saml:AttributeValue>950052413</saml:AttributeValue>

...



  </saml:Attribute>

...



  <saml:Attribute Name="autorisatieregel/context">    <saml:

...

AttributeValue>https://goedbeheerdziekenhuis/autorisatieregels/medicatiecontext/v2</saml:

...

AttributeValue>

  </saml:Attribute>

...



  <saml:Attribute Name="applicationID">

...



   <saml:AttributeValue>urn:IIroot:2.16.840.1.113883.2.4.6.6:IIext:300

...



   </saml:AttributeValue>

...



  </saml:Attribute>

...



</saml:AttributeStatement>


 

Tenslotte wordt het attributen statement blok afgesloten met

...

</saml:AttributeStatement>



Anchor
Algoritmes
Algoritmes
Algoritmes

Om de integriteit en onweerlegbaarheid van het SAML transactietoken te waarborgen wordt een XML Signature geplaatst, zoals beschreven in [IH tokens generiek]. Na plaatsen van de XML Signature kan de ontvanger, met gebruikmaking van het persoons- of organisatiegebonden PKIoverheid-certificaat van de verzender en de CA certificaten zoals verstrekt door PKIoverheid, onomstotelijk vaststellen dat het SAML transactietoken ondertekend is met de privé sleutel behorend bij het gebruikte certificaat van de zorgmedewerker of de organisatie.

...

  • Voor het berekenen van de hashwaarde wordt SHA-256 gebruikt.
  • Voor de digitale handtekening in AORTA wordt gebruik gemaakt van een RSA handtekening over een SHA-256 digest.


Image Modified

Omdat de XML Signature onderdeel is van het SAML transactietoken en in het SAML transactietoken geplaatst wordt, moet er een "enveloped-signature" transformatie uitgevoerd worden die de Signature tags uit het SAML transactietoken verwijderd gevolgd door een “exc-c14n transformatie” (zie ook [SAML Core] §5.4.3 en §5.4.4).


Anchor
Opbouw
Opbouw
Opbouw

De headers

Eerst wordt het SAML transactietoken – het <saml:Assertion ...> element aangemaakt en gevuld met die elementen, zoals beschreven in paragraaf 2.3 Inhoud.



Code Block
<saml:Assertion

...



   ID="token_2.16.528.1.1007.3.3.1234567.1_0123456789"

...



   IssueInstant="2009-06-24T11:47:34Z"

...



   Version="2.0"

...



   xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">

...



 ... Zie paragraaf 2.3 Inhoud ...

...



</saml:Assertion>



Het XML Signature blok is onderdeel van het SAML transactietoken. Het XML Signature blok komt na het <saml:Issuer> element. Na de Signature volgt de rest van de inhoud van de assertion.



Code Block
<saml:Assertion

...



   ID="token_2.16.528.1.1007.3.3.1234567.1_0123456789"

...



   IssueInstant="2009-06-24T11:47:34Z"

...



   Version="2.0"

...



   xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">

...



  <saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">

...



   urn:IIroot:?:IIext:?

...



  </saml:Issuer>

...



  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

...



    <ds:SignedInfo>

...



    ...

...



    </ds:SignedInfo>

...



    <ds:SignatureValue>Wuwn...5e4=</ds:SignatureValue>

...



    <ds:KeyInfo>

...



      <ds:X509Data>

...



        <X509IssuerSerial>

...



          <X509IssuerName>CN=De Auteur CA,O=Nictiz,C=NL</X509IssuerName>

...



          <X509SerialNumber>359724...41160195</X509SerialNumber>        

...



        </X509IssuerSerial>

...



       </ds:X509Data>

...



    </ds:KeyInfo>

...



  </ds:Signature>  ...

...



  ... Zie paragraaf 2.3 Inhoud ...

...



</saml:Assertion>


Indien de Signature aangemaakt wordt moet niet meer met de strings (saml:Assertion en SignedInfo) gemanipuleerd worden, maar ze moeten octet-voor-octet overgenomen worden in het bericht. Strikt genomen is het toegestaan wijzigingen aan te brengen die door canonicalisatie bij de ontvanger weer opgeheven worden, maar wanneer de digitale handtekening door middel van strings wordt opgebouwd, is het een foutgevoelige handeling.

...

Het SAML transactietoken met daarin de digitale handtekening wordt in het WS-Security SOAP Header gezet. Op het <wss:Security> element moet een soap:mustUnderstand="1" vlag opgenomen worden, die aangeeft dat de ontvanger dit security element moet verwerken en een soap:actor="http://www.aortarelease.nl/actor/zim" die aangeeft dat de ZIM dit security element verwerkt.



Code Block
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

...



  ...

...



  <wss:Security xmlns:wss=

...



    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"

...



    soap:actor="http://www.aortarelease.nl/actor/zim" soap:mustUnderstand="1">

...



       <saml:Assertion ... >

...



       <saml:Issuer>...</saml:Issuer>

...



       <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

...



        <ds:SignedInfo>

...



        ...

...



        </ds:SignedInfo>

...



        <ds:SignatureValue>Wuwn...5e4=</ds:SignatureValue>

...



        <ds:KeyInfo>

...



          <ds:X509Data>

...



          ...

...



          </ds:X509Data>

...



        </ds:KeyInfo>

...



       </ds:Signature>

...



    ... Zie paragraaf 2.3 Inhoud ...

...



       </saml:Assertion ... >

...



  </wss:Security>

...



</soap:Header>