OSR:2019/JWT: verschil tussen versies
k |
|||
Regel 82: | Regel 82: | ||
{| cellspacing="5" cellpadding="0" style="margin:0em 0em 1em 0em; border:1px solid #1DA0E7; background:#fffdc4;width:100%" |
{| cellspacing="5" cellpadding="0" style="margin:0em 0em 1em 0em; border:1px solid #1DA0E7; background:#fffdc4;width:100%" |
||
− | | ''' Let op:'''<br>Vanaf 18 maart 2019 vind er een update plaats aan de invulling van header- en payload parameters binnen het OSR. Dit om in een zo vroeg mogelijk stadium te voldoen aan de aankomende Edukoppeling-definities rondom REST |
+ | | ''' Let op:'''<br>Vanaf 18 maart 2019 vind er een update plaats aan de invulling van onderstaande header- en payload parameters binnen het OSR. Dit om in een zo vroeg mogelijk stadium te voldoen aan de aankomende Edukoppeling-definities rondom REST-services. |
Klik op de link "uitvouwen" aan de rechterkant om de aankomende wijziging te tonen. |
Klik op de link "uitvouwen" aan de rechterkant om de aankomende wijziging te tonen. |
||
Regel 147: | Regel 147: | ||
<nowiki>*</nowiki> Naast x5c zal ook x5u onderdeel gaan uitmaken van de Edukoppeling Standaard, maar OSR ondersteund deze claim in de huidige release nog niet. |
<nowiki>*</nowiki> Naast x5c zal ook x5u onderdeel gaan uitmaken van de Edukoppeling Standaard, maar OSR ondersteund deze claim in de huidige release nog niet. |
||
+ | Payload parameters |
||
+ | {|class="wikitable" |
||
+ | ! style="text-align:left;"| # |
||
+ | ! style="text-align:left;"| Claim |
||
+ | ! style="text-align:left;"| Waarde |
||
+ | ! style="text-align:left;"| Omschrijving |
||
+ | ! style="text-align:left;"| Verplicht/Optioneel |
||
+ | |- |
||
+ | |p1 |
||
+ | |iss |
||
+ | | |
||
+ | |Afzender van het bericht (issuer), notatie ‘edustd:oin’ || [de OIN van de afzenderorganisatie] of ‘edustd:oin’ || [de OIN van de afzenderorganisatie inclusief administratie-kenmerk] |
||
+ | |Verplicht |
||
+ | |- |
||
+ | |p2 |
||
+ | |aud |
||
+ | | |
||
+ | |Geadresseerden van het bericht (audience). Hier kan een enkele geadresseerde worden ingevuld in een string-notatie, of een lijst van geadresseerden. De notatie voor geadresseerden is ‘edustd:oin’ || [OIN van de geadresseerde], of ‘edustd:oin’ || [OIN van de geadresseerde inclusief zijn administratie-kenmerk]. |
||
+ | |Verplicht |
||
+ | |- |
||
+ | |p3 |
||
+ | |sub |
||
+ | | |
||
+ | |Onderwerp van de berichtuitwisseling (subject). Hier is mogelijk om hier het service-version kenmerk (d.w.z. de namespace van de service) in te vullen, zodat deze informatie beschikbaar is om additionele gegevens van de service en zijn endpoint in het OSR op te zoeken. |
||
+ | |Optioneel |
||
+ | |- |
||
+ | |p4 |
||
+ | |iat |
||
+ | | |
||
+ | |Timestamp (milliseconden sinds epoch) waarop het token is aangemaakt (issued at). |
||
+ | |Verplicht |
||
+ | |- |
||
+ | |p5 |
||
+ | |nbf |
||
+ | | |
||
+ | |Tijdstip (milliseconden sinds epoch) vanaf welke het JWT token geldig is (not before). Als niet opgegeven, gelijk aan ‘iat’. |
||
+ | |Optioneel |
||
+ | |- |
||
+ | |p6 |
||
+ | |exp |
||
+ | | |
||
+ | |Tijdstip (milliseconden sinds epoch) tot welke het JWT token geldig is (expires). Als niet opgegeven, een uur (3.600.000 milliseconden) na iat. |
||
+ | |Optioneel |
||
+ | |- |
||
+ | |p7 |
||
+ | |edustd:body |
||
+ | | "edustd:body":{"hash":"...","alg":"B64SHA256"} |
||
+ | |Container voor velden 7.1 en 7.2. |
||
+ | |Verplicht |
||
+ | |- |
||
+ | |p7.1 |
||
+ | |hash |
||
+ | | |
||
+ | |De base64url-geëncodeerde hashwaarde van het bericht zelf. |
||
+ | |Verplicht |
||
+ | |- |
||
+ | |p7.2 |
||
+ | |alg |
||
+ | | B64SHA256 |
||
+ | |Het algoritme waarmee de hashwaarde van het bericht is bepaald. |
||
+ | |Verplicht |
||
</div> |
</div> |
||
|} |
|} |
Versie van 8 mrt 2019 14:18
Waarom JWT
Voor de services 'registreren' en 'updaten' van endpoints wordt JWT toegepast om vast te stellen dat het bericht onderweg niet aangepast is en ondertekend is door degene die het bericht heeft opgesteld.
Binnen de onderwijsketen maken we afspraken over de manier waarop we ondertekening uitvoeren en controleren.
Deze afspraken worden vastgelegd in een Edukoppeling profiel, analoog aan de Edukoppeling afspraken die er voor de beveiliging van SOAP berichten worden gemaakt.
JWT nader bekeken
Er is een online tool beschikbaar om jwt tokens mee samen te stellen:
jwt.io |
Op de volgende pagina vindt u referenties naar JWT documentatie:
Belangrijke JWT documentatie
Het aanmaken van JWT tokens worden voor het grootste gedeelte automatisch door de libraries van uw ontwikkelplatform gegenereerd.
(zie jwt.io voor een lijst met beschikbare libraries).
Het JWT token wordt als http header meegestuurd. Om een JWT token te creëren moeten de volgende stappen worden uitgevoerd:
- 1. Stel het registreer/update endpoint bericht samen dat naar OSR wordt gestuurd.
- 2. Maak een base64 geëncodeerde SHA256 hash voor het bericht aan.
- 3. Maak de header en payload.
- 4. Maak het JWS token en onderteken het bericht met behulp van de private key en encodeer het totale bericht.
- 1. Stel het registreer/update endpoint bericht samen dat naar OSR wordt gestuurd.
hieronder is een voorbeeld bericht weergegeven van endpoint registreren:
{
"mandate_token":"6a47bfdd-81a7-46cd-b41f-d907e91ebdfc",
"administration_id": "0000000700004HR77707",
"service_version_namespace": "http://xml.eld.nl/schemas/Overstapservice/20170601",
"url": "https://t2.nl"
}
- 2. Maak een base64 geëncodeerde SHA256 hash voor het bericht aan.
Het OSR biedt een service aan om een json bericht te hashen met base64 SHA256 encoding. Het OSR controleert uiteindelijk de hash op basis van het registreer/update bericht.
POST /api/v1/jwt/hash
- 3. Maak de header en payload.
Header en payload bevatten een aantal parameters (claims), deze worden hieronder uitgewerkt.
Voeg de hash toe aan payload data.
header
{
"alg": "RS256",
"type": "JWT",
"jwk": {
"kty": "RSA",
"n": "25wryfsgd_OVH4_RAy6afe-ruuzKrK58zJK- …jjj ",
"e": "AQAB",
"x5c": [
"MIIFijCCA3KgAwIBAgIJANIncLtaUQHdMA… /rV"
],
"x5t": "vzAuinLys_OgCFLDv_G2CJQdUhY",
"x5t#256": "jkrWxwlbDlMSA3OzQOMhBJo0tjlLbp4IbDpAgwYOFGA",
"kid": "Kennisnet signing certificate",
"alg": "RS256",
"use": "sig"
}
}
Payload data
{
"iat": 1548330681,
"nbf": 1548330681,
"exp": 1548334281,
"aud": "00000003272448340204",
"iss": "00000003272448340116",
"hash": "DmSGW0lCV3OSNp/rVgGpodZ/Hcuje5ciQkiDqPhFpAk="
}
Let op: Vanaf 18 maart 2019 vind er een update plaats aan de invulling van onderstaande header- en payload parameters binnen het OSR. Dit om in een zo vroeg mogelijk stadium te voldoen aan de aankomende Edukoppeling-definities rondom REST-services. Klik op de link "uitvouwen" aan de rechterkant om de aankomende wijziging te tonen. Header parameters
* Naast x5c zal ook x5u onderdeel gaan uitmaken van de Edukoppeling Standaard, maar OSR ondersteund deze claim in de huidige release nog niet. Payload parameters
Header parameters
Payload parameters
* De volgende transformaties moeten worden gedaan om de hash te verkrijgen:
De header en payload van het JWT token worden ondertekend met het algoritme en bijbehorende parameters dat in de header van het JWT token is beschreven.
De 3 onderdelen worden gescheiden door een punt:
|