Draft: Voorstel EmployeeIdentity middel
In dit document doen we een inventarisatie naar de impact van het doorvoeren van een nieuw authenticatiemiddel EmployeeIdentity
.
Zie voor de technische specificatie het Pull request op RFC002.
Uitgangspunten
Uitgangspunten bij de voorgestelde oplossing zijn als volgt:
-
Minimale impact op de ontwikkelcapaciteit van leveranciers. We weten dat er nog veel moet gebeuren voor de eOverdracht en dat de deadline snel nadert. We stellen een oplossing voor die idealiter in één dag is in te bouwen bij de leveranciers.
-
Faciliteren van een groeipad. We weten dat het gebruik van persoonlijke authenticatiemiddelen binnenkort verplicht gaat worden via wetten als de WDO en de Wegiz icm diverse NEN normen. De oplossing maakt het mogelijk voor zorginstellingen en leveranciers om eenvoudig het niveau op te hogen.
-
Voldoen aan de NEN7513. Om te kunnen voldoen aan deze norm is het belangrijk te weten welke gebruiker welke gegevens heeft ingezien. De voorgestelde oplossing voldoet aan deze eis.
Oplossingsrichting
Assurance Level eis
De zorginstelling moet zelf kunnen bepalen welke eisen ze stellen aan het vertrouwensniveua van het gebruikte middel. Daarom stellen we een nieuw veld authenticatorAssuranceLevel
voor in het AuthorizationCredential
waarin een betrouwbaarheidsniveau van het gebruikte middel wordt opgegeven.
Het Nuts afspraken stelsel schrijft vervolgens een lijst van levels en middelen voor, bijvoorbeeld:
middel | level |
---|---|
EmployeeIdentity | low |
Yivi(IRMA) | middle |
Uzi | high |
Dit level moet worden gezet per resource door de bronhouder. De opvragende partij vraagt de gebruikersidentiteit uit op het gevraagde niveau.
Voorbeeld gebruik
Onderstaand object is een voorbeeld van een credentialSubject van een AuthorizationCredential
waar het authenticatorAssuranceLevel
veld wordt gebruikt:
{
"id": "did:nuts:SjkuVHVqZndMVVJwcnUzbjhuZklhODB1M1M0LW9LcWY0WUs5S2",
"legalBase": {
"consentType": "explicit",
"evidence": {
"path": "pdf/f2aeec97-fc0d-42bf-8ca7-0548192d4231",
"type": "application/pdf"
}
},
"localParameters": {...},
"resources": [
{
"path": "/DocumentReference/f2aeec97-fc0d-42bf-8ca7-0548192d4231",
"operations": ["read"],
"userContext": true,
"authenticatorAssuranceLevel": "low"
}
],
"purposeOfUse": "test-service",
"subject": "urn:oid:2.16.840.1.113883.2.4.6.3:123456780"
}
Introductie van een nieuw EmployeeIdentity middel
Het probleem wat we op proberen te lossen is de problematiek bij implementatie, acceptatie en uitrol van persoonlijke authenticatiemiddelen. We verwachten dat zorginstellingen meer tijd nodig hebben intern beleid, ondersteuning en uitrol van deze middelen in te richten en op te tuigen. Ook is de keuze uit middelen nog beperkt waardoor deze nog niet aansluiten bij de werkprocessen van zorginstellingen. Zorginstellingen geven aan terug te willen vallen op bestaande afspraken onderling en elkaar daarin te vertrouwen met het identificeren van medewerkers. Daarom introduceren we het EmployeeIdentity
middel. Dit middel is van niveau low
en gebruikt de identiteit van de ingelogde gebruiker.
Dit middel is een drop-in replacement voor het Yivi(IRMA) middel.
Sessie aanmaken
Huidige aanroep met IRMA:
POST /internal/auth/v1/signature/session
{
"means": "irma",
"payload": "EN:PractitionerLogin:v3 I hereby declare to act on behalf of CareBears located in CareTown. This declaration is valid from Monday, 2 January 2006 15:04:05 until Monday, 2 January 2006 17:04:05."
}
Voorgestelde aanroep voor EmployeeIdentity:
POST /internal/auth/v1/signature/session
{
"means": "employeeIdentity",
"params": {
"@context":[
"http://schema.org/",
"https://nuts.nl/credentials/v1",
"https://www.w3.org/2018/credentials/v1"
],
"type": ["VerifiableCredential", "NutsEmployeeIdentityCredential"],
"issuer":"did:nuts:123456789",
"credentialSubject": {
"@type": "EmployeeRole",
"identifier": "481",
"roleName": "Verpleegkundige niveau 2",
"member": {
"@type": "Person",
"initials": "J",
"familyName": "van Dijk",
"email": "j.vandijk@example.com"
}
}
},
"payload": "EN:PractitionerLogin:v3 I hereby declare to act on behalf of CareBears located in CareTown. This declaration is valid from Monday, 2 January 2006 15:04:05 until Monday, 2 January 2006 17:04:05."
}
Response:
IRMA
{
"sessionID": "123",
"sessionPtr": {QRCode},
"means": "irma"
}
De frontend moet dan de inhoud van het sessionPtr
veld als QR code renderen.
EmployeeIdentity
{
"sessionID": "123",
"sessionPtr": { "url":"nuts.example.com/public/auth/employeeID/123" },
"means": "irma"
}
De frontend moet nu de url
uit het sessionPtr
object gebruiken om een nieuw browser venster te openen of een in een iframe te renderen.
Pollen van de sessie status
IRMA en EmployeeIdentity:
GET /internal/auth/v1/signature/session/{sessionID}
Pending, zolang de gebruiker nog niet klaar is:
{
"status": "pending"
}
Afgerond:
{
"status": "completed",
"verifiablePresentation": {
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://nuts.nl/credentials/v1",
"http://schema.org/",
"https://w3c-ccg.github.io/lds-jws2020/contexts/lds-jws2020-v1.json"
],
"type": "VerifiablePresentation",
"verifiableCredential": {
"issuer": "did:nuts:123456789",
"type": "VerifiableCredential",
"expirationDate": "2023-04-03T20:34:17.687862+01:00",
"credentialSubject": {
"@type": "EmployeeRole",
"identifier": "481",
"roleName": "Verpleegkundige niveau 2",
"member": {
"@type": "Person",
"initials": "J",
"familyName": "van Dijk",
"email": "j.vandijk@example.com"
}
},
"proof": {
"type": "JsonWebSignature2020",
"verificationMethod": "did:nuts:123456789#key-1",
"created": "2023-04-03T16:34:17.687862+01:00",
"jws": "eyJhbGciOiJFUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..hKcboC8m6YnZPi6ReJAYs0J0Ztn5nxcx2EavoXdtrkWxmE1JZmImW89_8IIgjvfI8XtGeDlEnGywAuY2u7y9Bw"
}
},
"evidence": {
"type": "NutsBrowserSession",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62",
"ipAddress": "127.0.0.1"
},
"proof": {
"challenge": "LOGIN CONTRACT",
"type": "JsonWebSignature2020",
"verificationMethod": "did:nuts:123456789#key-1",
"created": "2023-04-03T16:34:17.687862+01:00",
"jws": "eyJhbGciOiJFUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..hKcboC8m6YnZPi6ReJAYs0J0Ztn5nxcx2EavoXdtrkWxmE1JZmImW89_8IIgjvfI8XtGeDlEnGywAuY2u7y9Bw"
}
}
}
Gebruik van het identity token
Dit is het zelfde als met IRMA, de waarde van het verifiableCredential
veld wordt gebruikt als input voor het "usi" token bij het aanvragen van een access_token
.