info@yenlo.com
ned
Menu
Identity & Access Management 7 min

eIDAS 2.0, EUDI Wallet ft. WSO2 Identity Server: een verifieerbare credential uitgeven

Hasitha Amal Da Silva, Integration Consultant bij Yenlo
Hasitha Amal Da Silva
Integration Consultant
eIDAS dots

WSO2 loopt voorop zodra er een nieuwe identiteitsstandaard verschijnt, en Digital Identity Wallets zijn de nieuwste toevoeging. In deze blogserie neem ik je mee in wat WSO2 Identity Server hierin kan. We beginnen bij de minimale opzet en bouwen dat uit tot een implementatie die volledig voldoet aan de EUDI ARF, zodat je een credential kunt uitgeven aan een EUDI wallet.

Deze post gaat over hoe de nieuwste release van WSO2 Identity Server dat voor elkaar krijgt: een verifieerbare credential uitgeven vanuit een organisatie naar iemands persoonlijke wallet. Eerst even de achtergrond.

Wat is de EU Digital Identity Wallet (EUDI Wallet)?

eIDAS 2.0 is de nieuwe EU-verordening die elke lidstaat verplicht zijn burgers een veilige, soevereine en overal geaccepteerde manier te geven om zich te identificeren, en om hun officiële gegevens en kwalificaties te tonen. Het idee: jij deelt zelf wat nodig is, met wie je wilt, en niets meer dan dat.

Vergelijk het met inchecken bij een hotel, een auto huren, alcohol kopen of een bankrekening openen. Nu moet je daarvoor nog je ID-kaart, paspoort of rijbewijs laten zien, en vaak wordt daar ook een kopie van gemaakt: meteen meer gegevens dan nodig, die vervolgens ook nog eens veel te lang blijven liggen.

Een app moet die onnodige blootstelling van je gegevens straks flink terugdringen.

De EUDI Wallet wordt de brug tussen jou en de digitale wereld: een beveiligde container op je smartphone waarmee je je documenten en gegevens direct kunt tonen, waar je maar wilt.

Stand van zaken rond de ontwikkeling van de EUDI Wallet

Alle EU-lidstaten moeten uiterlijk eind 2026 minstens één walletaanbieder gecertificeerd hebben en kerncredentials kunnen uitgeven naar die wallets. Vanaf 2030 zou zo’n 80 procent van de EU-burgers de wallet moeten kunnen gebruiken.

Voor de technische kant is er inmiddels een breed gedragen Architecture and Reference Framework (ARF), opgesteld vanuit eIDAS 2.0. Landen als Nederland (de NL Wallet) en Duitsland (de Duitse EUDI Wallet) bouwen hun implementatie hierop, net als tal van andere landen.

Een aantal leveranciers pakt dit vraagstuk vanuit een andere hoek aan:

Algemene walletimplementaties voor enterprise- en medewerkersscenario’s.

Handig om te testen tegen een PID provider, zoals een overheidsinstantie of universiteit, of tegen een relying party, want ze zijn gebouwd volgens dezelfde specificatie als een EUDI Wallet.

  • Lissi verkoopt API-software (de Lissi Connector) waarmee bedrijven credentials kunnen verifiëren of uitgeven aan een EUDI wallet. Daarnaast heeft Lissi een werkend prototype, de Lissi Wallet, die gebruikers zelf installeren om hun credentials op te slaan en te tonen. Dat is ook de wallet die ik verderop in deze post gebruik.

Infrastructuur, SDK’s en API’s om zelf een wallet of de bijbehorende onderdelen te bouwen.

  • Walt.id maakt de bouwstenen voor het uitgeven en controleren van digitale EU-ID’s en credentials open source. De Community Stacks zijn gratis, dus een universiteit kan bijvoorbeeld direct een digitaal diploma uitgeven zonder eerst een duur leverancierscontract te tekenen.
  • Sphereon koppelt bestaande interne systemen van een bedrijf aan het digitale EU-ID-systeem, inclusief automatische compliance en auditlogging. Een bank met oudere kernsystemen kan zo in één stap de belastinggegevens van een klant verifiëren én meteen het wettelijke bewijs genereren dat toezichthouders vragen.
  • SpruceID levert developer toolkits om EU-conforme digitale identiteiten in bestaande apps te integreren. Dankzij de modulaire opzet kan het engineeringteam van een luchtvaartmaatschappij bijvoorbeeld een “Login with European Digital ID”-knop toevoegen zonder de bestaande beveiliging op de schop te gooien.

Wat je nodig hebt om de walletflow end-to-end te doorlopen

Trust triangle uit de EUDI ARF met de PID- of QEAA-issuer, de EUDI Wallet van de gebruiker en de relying party

Rond een EUDI Wallet Instance verloopt het proces zoals in figuur 1:

  1. Je slaat je persoonlijke credentials of attributen op vanuit een vertrouwde issuer, denk aan een overheid, universiteit of ziekenhuis. Vanaf dat moment staat er een cryptografisch verifieerbare credential op je telefoon.
  1. Moet je je identiteit of een claim aantonen bij een relying party, bijvoorbeeld een energieleverancier, telecomaanbieder, bank of werkgever? Dan vraagt die partij een presentatie op bij je wallet.
  1. Je wallet stuurt die presentatie terug, opgebouwd uit je bestaande verifieerbare credentials. De relying party controleert vervolgens de herkomst en het eigenaarschap ervan aan de hand van de issuergegevens, via federated trusted lists die vooraf zijn ingevuld volgens het proces uit EUDI ARF.

Waar past WSO2 Identity Server in dit plaatje?

Zoals figuur 1 laat zien, verwacht de EUDI wallet een specifiek protocol van issuers en relying parties: OpenID4VCI en OpenID4VP. Precies daar komt WSO2 Identity Server om de hoek kijken. Het is wereldwijd een bewezen IAM-product, en kan nu officieel verifieerbare credentials uitgeven aan een EUDI wallet (stap 1). Aan ondersteuning voor het valideren van een verifieerbare presentatie via OpenID4VP wordt gewerkt voor toekomstige releases.

Een verifieerbare credential uitgeven aan de Lissi Demo Wallet

Laten we bij het eerste doel beginnen en het scenario schetsen. Stel: je werkt voor een overheidsinstantie die burgers bedient via WSO2 Identity Server 7.3.0, en je wilt eerst weten of WSO2 kan verbinden met een wallet die aan de EUDI-standaard voldoet. Ik gebruik daarvoor de Lissi demo wallet: eenvoudig op te zetten en compliant met de EUDI ARF. WSO2 heeft er al een handleiding voor gepubliceerd, en ik vul die aan met de stappen die ik er zelf bij moest uitvogelen.

Vereisten

  1. Download WSO2 Identity Server via wso2.com/products/downloads
  1. Download de Lissi Demo wallet-app en maak gratis een demo-account aan.

Configuratiewijzigingen in WSO2

Voeg deze configuratie toe aan wso2-is/repository/conf/deployment.toml:

[verifiable_credentials]
enable = true

Je hebt een domein nodig dat je vanaf je telefoon kunt bereiken. Heb je alle stappen lokaal doorlopen, dan moet je je WSO2-server ook veilig beschikbaar maken voor de mobiele app. Zelf loste ik dat op met een Docker-opzet: nginx proxyt het verkeer van en naar WSO2 Identity Server, en via poort 80 vanuit Visual Studio Code maak ik die nginx-server bereikbaar.

Stappen binnen WSO2 Identity Server

  1. Maak een gebruiker aan met de claims die je in de wallet wilt zetten, bijvoorbeeld given_name, last_name en emailaddress.
  1. Maak een credential template aan, zie stap 1 van de WSO2-guide.
  1. Registreer de Digital Wallet Application. De Lissi demo wallet verwacht een specifieke Client ID, dus je maakt deze applicatie aan via de WSO2 REST API, zoals in Bijlage A hieronder.
  1. Geef die nieuwe applicatie toestemming om de credential op te vragen, zie stap 3 van de WSO2-guide.
  1. Wil je met Lissi als issuer werken, dan moet de applicatie een nieuw autorisatietype ondersteunen. Maak het autorisatietype openid_credential aan zoals beschreven in Bijlage B, haal de ID van die resource op, en koppel hem aan de applicatie uit stap 3.
  1. Haal de credential offer URI op uit de Management Console en maak daar met een online tool een QR-code van, zie stap 4 van de WSO2-guide. Zet het content type op “Text”.
WSO2 Identity Server-console met het credential template Yenlo Demo VC ID, gebruikersattributen en de credential offer URI
QR-codegenerator met de credential offer URI van WSO2 Identity Server als tekst

7. Nu volg je de laatste stap uit de WSO2-guide: scan de QR-code met de Lissi Wallet App. Je krijgt de WSO2-inlogpagina te zien, en zodra je bent ingelogd, verschijnt de verifieerbare credential in de Lissi App.

Lissi Wallet vraagt de gebruiker de Work ID-credential van WSO2 Identity Server te accepteren
Overzicht in de Lissi Wallet met de nieuwe work_id verifieerbare credential
Detailweergave van de work_id-credential in de Lissi Wallet met voornaam, achternaam en e-mail

Klaar. Je hebt nu gezien hoe WSO2 Identity Server 7.3.0 als OID4VC-issuer credentials uitgeeft aan een EUDI-compatibele wallet.

Wat zijn de volgende stappen?

Credentials laten uitgeven vanuit WSO2 Identity Server is een mooie eerste stap, maar het werk stopt hier niet. De certificeringsdeadline van 2026 betekent dat de meeste lidstaten, en hun leveranciers, nog volop aan het uitzoeken zijn hoe de rest van de flow in de praktijk werkt: het presenteren en valideren van credentials incluis. In volgende posts behandelen we OpenID4VP-ondersteuning zodra die in een nieuwe WSO2 IS-release landt, en wat er verandert nu de EUDI ARF zelf blijft veranderen. Loop je vast bij het aansluiten van WSO2 IS op je bestaande stack, of wil je ondersteuning bij de migratie naar 7.3.0 om deze walletfunctionaliteit te benutten? Yenlo is de toonaangevende WSO2-partner in Europa.

Bijlage

A: De Digital Wallet Application aanmaken met de WSO2 REST API

curl --request POST \
  --url https://<WSO2_HOSTNAME>/api/server/v1/applications \
  --header 'access-control-allow-origin: https://<WSO2_HOSTNAME>/t/carbon.super/console' \
  --header 'authorization: Basic YWRtaW46YWRtaW4=' \
  --header 'content-type: application/json' \
  --data '{
    "inboundProtocolConfiguration": {
      "oidc": {
        "clientId": "9c481dc3-2ad0-4fe0-881d-c32ad02fe0fc",
        "grantTypes": [
          "authorization_code",
          "refresh_token"
        ],
        "publicClient": true,
        "allowedOrigins": [],
        "callbackURLs": [
          "https://oob.lissi.io/vci-cb"
        ],
        "pkce": {
          "mandatory": true,
          "supportPlainTransformAlgorithm": false
        },
        "refreshToken": {
          "renewRefreshToken": true,
          "expiryInSeconds": 86400
        }
      }
    },
    "accessUrl": "",
    "imageUrl": "",
    "name": "Digital Wallet App",
    "advancedConfigurations": {
      "skipLogoutConsent": true,
      "discoverableByEndUsers": false,
      "skipLoginConsent": true
    },
    "authenticationSequence": {
      "type": "DEFAULT",
      "steps": [
        {
          "options": [
            {
              "idp": "LOCAL",
              "authenticator": "basic"
            }
          ],
          "id": 1
        }
      ]
    },
    "templateId": "digital-wallet-application",
    "templateVersion": "1.0.1"
  }'

De resulterende application ID staat in de responseheader Location:

https://<WSO2_HOSTNAME>/api/server/v1/applications/3afe9cd6-cb2b-42cc-bb33-ccf3e6709aee

B: Een nieuw autorisatietype aanmaken en koppelen aan de nieuw aangemaakte applicatie

B.1: Het autorisatietype aanmaken

curl --request POST \
  --url https://<WSO2_HOSTNAME>/api/server/v1/api-resources \
  --header 'accept: application/json' \
  --header 'authorization: Basic YWRtaW46YWRtaW4=' \
  --header 'content-type: application/json' \
  --data '{
    "name": "EUWallet API",
    "identifier": "euwallet_api",
    "description": "EUWallet API representation",
    "requiresAuthorization": true,
    "authorizationDetailsTypes": [
      {
        "type": "openid_credential",
        "name": "openid_credential",
        "description": "openid_credential",
        "schema": {
          "type": "object",
          "required": [
            "type",
            "credential_configuration_id",
            "locations"
          ],
          "properties": {
            "locations": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uri"
              }
            },
            "type": {
              "type": "string",
              "enum": [
                "openid_credential"
              ]
            },
            "credential_configuration_id": {
              "type": "string"
            }
          }
        }
      }
    ]
  }'

De resulterende resource ID staat in de responseheader Location:

https://<WSO2_HOSTNAME>/api/server/v1/api-resources/6b68310c-9a21-4f41-aa19-cc520c51f77c

B.2: Het nieuwe autorisatietype koppelen aan de Digital Wallet Application

curl --request POST \
  --url https://<WSO2_HOSTNAME>/api/server/v1/applications/{{01_application_id}}/authorized-apis \
  --header 'accept: application/json' \
  --header 'authorization: Basic YWRtaW46YWRtaW4=' \
  --header 'content-type: application/json' \
  --data '{
    "id": "{{step05_adt_id}}",
  "authorizationDetailsTypes": []
  }'

Whitepaper: API Security

2
Download Whitepaper
ned
Sluiten