Structuur
Het SAML contracttoken bestaat uit een digitale SAML assertion waarmee een contractuele relatie tussen twee partijen cryptografisch wordt vastgelegd. Dit token is ondertekend door partij A en vormt de bevestiging van het vooraf uitgegeven concept-contracttoken, dat eerder door partij B is ondertekend.
Het concept-contracttoken is eveneens een SAML assertion en bevat dezelfde structurele elementen als het uiteindelijke contracttoken. Enkele specifieke kenmerken en verschillen worden hieronder toegelicht.
Verschillen tussen concept-contracttoken en contracttoken
Hoewel beide tokens qua structuur vrijwel identiek zijn, gelden de volgende verschillen:
-
Issuer:
-
In het concept-contracttoken is de issuer de FQDN (Fully Qualified Domain name) uit het SubjectAltName (SAN) uit het certificaat van de service provider van partij B (de contractnemer).
-
In het contracttoken is de issuer de SubjectAltName.otherName.<Subject ID> uit het certificaat van de service provider van partij A (de contractgever). Het <Subject ID> is een samengesteld veld bij de contractgever, bestaande uit door een '-' gescheiden velden:
<Subject ID> = <versie-nr>-<UZI-nr>-S-<URA>-<rol>-<AGB-code>. De contractgever heeft een URA (abonneenummer) van een geregistreerde zorgaanbieder.
-
-
Subject:
-
Het subject is in beide gevallen de SubjectAltName van de tegenpartij:
-
In het concept-token dus de URA van partij A,
-
In het contracttoken de FQDN van partij B.
-
-
[Toelichting: dit is dus formeel gezien geen verschil in structuur, maar een logisch spiegelbeeld in rollen.]
-
Certificering en ondertekening
-
Het concept-contracttoken wordt ondertekend met het servercertificaat van partij B:
-
Dit betreft een Private PKIo-servercertificaat zoals opgenomen in Certificaten | VZVZ. Deze certificaten bevestigen dat een domein toebehoort aan een organisatie die bij een Kamer van Koophandel (of equivalent) geregistreerd is.
-
-
Het contracttoken wordt ondertekend met het UZI-servercertificaat van partij A (geregistreerd zorgaanbieder). UZI-servercertificaten worden beheerd door de UZI-registerorganisatie, die valt onder de verantwoordelijkheid van CIBG, een onderdeel is van VWS.
Assertion
De SAML assertion heeft de volgende structuur (de waarden die in het token gebruikt worden zijn fictief):
|
Element/@Attribute |
0..1 |
Omschrijving |
|---|
|
Element/@Attribute |
0..1 |
Omschrijving |
|---|
|
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 |
Concept-contracttoken: De Subject Alternative Name (SAN) van de te contracteren partij (partij B). Dit is de FQDN. Contracttoken: De Subject Alternative Name van de contractnemer (partij A). Dit is de URA. |
|
@NameQualifier |
0 |
Niet gebruiken |
|
@SPNameQualifier |
0 |
Niet gebruiken |
|
@Format |
1 |
Vaste waarde: 'urn:oasis:names:tc:SAML:2.0:nameid-format:entity' |
|
@SPProviderID |
0 |
Niet gebruiken |
|
Signature |
1 |
Het contracttoken wordt ondertekend met het UZI-servercertificaat van partij A (geregistreerd zorgaanbieder). UZI-servercertificaten worden beheerd door de UZI-registerorganisatie, die valt onder de verantwoordelijkheid van CIBG, een onderdeel is van VWS. Het concept-contracttoken wordt ondertekend met het servercertificaat van partij B. Dit betreft een private PKIo-servercertificaat. Het servercertificaat wordt als X.509-certificaat opgenomen in de Signature, zodat de ontvanger de ondertekening kan verifiëren. |
|
KeyInfo |
|
Informatie over de publieke sleutel en certificaat van beide tokens |
|
X509Data |
|
informatie over het X.509-certificaat staat dat gebruikt is voor de digitale handtekening. |
|
X509Certificate |
|
Het base64-gecodeerde certificaat waarmee het token is ondertekend |
|
Subject |
1 |
Subject Alternative Name van de tegenpartij:
|
|
BaseID |
0 |
Niet gebruiken |
|
NameID |
1 |
Bevat de Subject Alternative Name. URA of FQDN. |
|
EncryptedID |
0 |
Niet gebruiken |
|
SubjectConfirmation |
1 |
Moet aanwezig zijn. |
|
@Method |
1 |
Vaste waarde: 'urn:oasis:names:tc:SAML:2.0:cm:sender-vouches’ |
|
SubjectConfirmationData |
0 |
We maken niet gebruik van dit veld omdat dit veld gebruikt wordt als aanvullende informatie voor het bevestigen van de identiteit van de “Subject” (de tegenpartij), maar niet de ondertekende partij of diens certificaat. |
|
Conditions |
1 |
Moet aanwezig zijn. |
|
@NotBefore |
1 |
Moet aanwezig zijn. |
|
@NotOnOrAfter |
1 |
Moet aanwezig zijn. Mag maximaal 10 jaar na @NotBefore liggen. |
|
Condition |
0 |
Niet gebruiken |
|
AudienceRestriction |
1 |
Moet aanwezig zijn |
|
Audience |
1..* |
Meerdere audience zijn toegestaan. Vaste waarde: 'urn:generic:audience' |
|
ProxyRestriction |
0 |
Niet gebruiken |
|
Advice |
0 |
Niet gebruiken |
|
AuthnStatement |
1 |
Moet aanwezig zijn |
|
@AuthnInstant |
1 |
Tijdstip van aanmaak. |
|
@SessionIndex |
0 |
Niet gebruiken |
|
AuthnContext |
1 |
Moet aanwezig zijn |
|
AuthnContextClassRef |
1 |
Vaste waarde: 'urn:oasis:names:tc:SAML:2.0:ac:classes:X509' |
|
AttributeStatement |
1 |
Moet aanwezig zijn |
|
Attribute |
0..1 |
Optioneel aanwezig; alleen in contracttoken. |
|
@Name |
1 |
Vaste waarde: '_CTR_locatie' |
|
AttributeValue |
0..1 |
De URL naar het Contracttokenregister |
|
Attribute |
1 |
Moet aanwezig zijn in beide tokens |
|
@Name |
1 |
Vaste waarde: '_FQDN' |
|
AttributeValue |
1 |
Fully Qualified Domain Name van de tegenpartij |
|
Attribute |
1 |
Moet aanwezig zijn alleen in contracttoken. |
|
@Name |
1 |
Vaste waarde: '_Concept-contract_token' |
|
AttributeValue |
1 |
Base64 representatie van het Concept-Contracttoken, aanwezig in het contracttoken |
|
Attribute |
0..1 |
Optioneel in contracttoken. |
|
@Name |
1 |
Vaste waarde: '_AC' |
|
AttributeValue |
1 |
Bevat een X.509 Attribute certificate |
|
Attribute |
0..1 |
Optioneel in beide tokens |
|
@Name |
1 |
Vaste waarde: '_Scope' |
|
AttributeValue |
1 |
Bevat de scope (dienst) van het contract |
|
Attribute |
1 |
Verplicht in beide tokens |
|
@Name |
1 |
Vaste waarde: 'urn:zorg:tokenType' |
|
AttributeValue |
1 |
Afhankelijk van het type token een vaste waarde: 'contracttoken' of 'conceptcontracttoken' |
|
Attribute |
0..1 |
|
|
@Name |
1 |
Vaste waarde: '_Contractterms' |
|
AttributeValue |
1 |
URI |
N.B.: bovenstaande tabel bevat de meest gebruikte elementen van SAML assertions en is derhalve niet volledig. Voor niet genoemde elementen geldt: Niet gebruiken.