code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NDcxOTk4MX0..u8uQLPiiv81UYs0Z.KgbhPNw-B0pYZ7oSVcusHOCABwrV6Zz6r9pPb3KeM_ZmE5iXQJZVz3fyI9pF1ic8ELCWReAkBf_uAyvQK_YBqMVxoX0ycmd8txGa2EAxbSOJ6eSRcC_i4yMwkF3goI5f491uDJaB2YPTFxKS0Xna0y3AEr3TmSpPgLvmOw2KlaEb832v6OtUAQ-RXTffCRXKYudv1y19T2vW-agXu8XVDvoHSi-aI4K_AaNmgQDCaW6Q548iHAB0OfmRH8M0Aav3a8naQmm8ZD5SH1LxlrxRr3fn1lr9Ev02a0RM7PYAT4xN2XrvsrltpnUf4KyNrQW-O8lN_a8EnhjyF-2GywfBwfLmB2MJzwSqBLJVUqsNnTSJWhTHxm5pcaUKX9QC9fZmC8y0eGzsLH5wvnhHQP1nqaiej0Dt67L5HAHcEqHUSSMHeI3vQvwGTgh04rJYtYdXGFgXCAp7WCpU-GaqrVF2z0w09AMT17BModEbGd1gPupKlPAVD4J6X5Cyl0jCJX8FwvJmbnLkB9Vc1YfI41Th9i5ZdzzGOeRR7rvzIYGfme-IoQ-OTmA3QFotAPq3ekcOWDwy_IOr5GAn29xjhuNdqcGKSixLhFpgvI-PW1OKaW3uQIOY0JjUTa2yNOj0iUj--Tulaetwooz22wZbxrzyauhVBQChfY9F5lg7b1EJu0cu6E9BdhNNpDFK7Oei-ahGM5nHWH0nic8rGNmqETick5BJC00P0ILivfTqYKDrVd91Hgo8IhMlISmwDzxScYOFcspD3YIcfS6ntX1Q0wBNnLf9b0S3sKONuPttra_yn4WCDFP8utl96Qv4Oz4mcxDMFbzRISzg04xHbLzdMQvrRpgOF0St8Ed3T3gWKhL6qByDJZPXe2-yEAm6JTKhPvAmyhhKuVRO6Eh9ACC53zMaZauJAfcrna5RdCVuixytRrzoBMxD2p2tSGy-rbyXQzyvg24giITFo6I8kPv7DzL7_qrisbk3HQYSCJT9B8PTR1oQIpO8Mt3s3JiLzt1giI0A1P_WImmgun0yRjh0NgceYuOxyKGLRIZVVLfbJZlNyxNjvsZAFLGPAoiHi_OOpLuwZOWUP8yhq7md3gIHNBTINmA8Knzh2_nO43-TcnrNByX233DEHjLdtOWIUHMQlGucNPeIrkxjWdhSkmD-ScCJTp647g9Hzd-i87wahPAo5K-hJdpf-4q0r3Ju4y1kRmAH88S4esrZABrVCIYfXuLdUAkYXgmrtbgfbEBnvAEwRwLq_Nq6BpvsXpjE_wBBvNVM-uQKm8BbYjwT-qV7VoX2gSQY-pZrMMxrCHvVEqEUxI7SMP8HWVlp0R_i0I-DompNFkwHCV_dhkCF76rI9HFAwsWLP7ArNOffT7-8Qim-JMhPEIJjGtbt1Xck2yO-auRhLx0YTdCkgltiDrPmoIwVUOXiOHbN5t0q.3ALjLQRB0-PATq0Jnn_7ig Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde Headers{"alg":"dir","enc":"A256GCM","cty":"NJWT","exp":1744719981} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1744719981Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzk3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoic2pCN0Mzc3pWcGs3Q2NfZnBvRDM4V0FMbnJpYjVGQ0IiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Im9ZMTVNVTF2Z0F1TWdIb21EaDliTk93Um41WlB1SXZBIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ0NzE5OTIxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlVYMjRYeEk1RWxXQ2FNUVJzR1lTaHdDUWtfbnJKQlpKIiwiZXhwIjoxNzQ0NzE5OTgxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ0NzE5OTIxLCJjb2RlX2NoYWxsZW5nZSI6IlE5NkN3WXFTdzUyRTFoa3JUQ21MXzF0cTdSS1A1aUVPTnVaQ285WDRIWmsiLCJqdGkiOiJlYzJiNzUwNmM3NTAwMDQzIn0.WJEuqj8J9U3-EU2GtjIHimifq4W00PquAlnSr-ilnPliFwi9VABHs6dEDoMBR_zR57tWWzhMagivspkqv5_mbA"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzk3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoic2pCN0Mzc3pWcGs3Q2NfZnBvRDM4V0FMbnJpYjVGQ0IiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Im9ZMTVNVTF2Z0F1TWdIb21EaDliTk93Um41WlB1SXZBIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ0NzE5OTIxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlVYMjRYeEk1RWxXQ2FNUVJzR1lTaHdDUWtfbnJKQlpKIiwiZXhwIjoxNzQ0NzE5OTgxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ0NzE5OTIxLCJjb2RlX2NoYWxsZW5nZSI6IlE5NkN3WXFTdzUyRTFoa3JUQ21MXzF0cTdSS1A1aUVPTnVaQ285WDRIWmsiLCJqdGkiOiJlYzJiNzUwNmM3NTAwMDQzIn0.WJEuqj8J9U3-EU2GtjIHimifq4W00PquAlnSr-ilnPliFwi9VABHs6dEDoMBR_zR57tWWzhMagivspkqv5_mbA"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzk3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoic2pCN0Mzc3pWcGs3Q2NfZnBvRDM4V0FMbnJpYjVGQ0IiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Im9ZMTVNVTF2Z0F1TWdIb21EaDliTk93Um41WlB1SXZBIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ0NzE5OTIxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlVYMjRYeEk1RWxXQ2FNUVJzR1lTaHdDUWtfbnJKQlpKIiwiZXhwIjoxNzQ0NzE5OTgxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ0NzE5OTIxLCJjb2RlX2NoYWxsZW5nZSI6IlE5NkN3WXFTdzUyRTFoa3JUQ21MXzF0cTdSS1A1aUVPTnVaQ285WDRIWmsiLCJqdGkiOiJlYzJiNzUwNmM3NTAwMDQzIn0.WJEuqj8J9U3-EU2GtjIHimifq4W00PquAlnSr-ilnPliFwi9VABHs6dEDoMBR_zR57tWWzhMagivspkqv5_mbA Headers{"alg":"BP256R1","typ":"JWT","kid":"puk_idp_sig"} {
"alg" : "BP256R1",
"typ" : "JWT",
"kid" : "puk_idp_sig"Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
} Body{"organizationName":null,"professionOID":"1.2.276.0.76.4.30","idNummer":"1-HBA-Testkarte-883110000129084","amr":["mfa","sc","pin"],"iss":"http://localhost:33971","response_type":"code","snc":"sjB7C3szVpk7Cc_fpoD38WALnrib5FCB","organizationIK":null,"code_challenge_method":"S256","given_name":"Günther Graf","token_type":"code","nonce":"oY15MU1vgAuMgHomDh9bNOwRn5ZPuIvA","client_id":"gematikTestPs","scope":"openid e-rezept","auth_time":1744719921,"redirect_uri":"http://test-ps.gematik.de/erezept","state":"UX24XxI5ElWCaMQRsGYShwCQk_nrJBZJ","exp":1744719981,"family_name":"Otís","iat":1744719921,"code_challenge":"Q96CwYqSw52E1hkrTCmL_1tq7RKP5iEONuZCo9X4HZk","jti":"ec2b7506c7500043"} {
"organizationName" : null,
"professionOID" : "1.2.276.0.76.4.30",
"idNummer" : "1-HBA-Testkarte-883110000129084",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:33971",
"response_type" : "code",Referenziert den erwarteten Response-Type des Flows. Muss immer 'code' lauten. Damit wird angezeigt das es sich hierbei um einen Authorization Code Flow handelt. Für eine nähere Erläuterung siehe OpenID-Spezifikation.
"snc" : "sjB7C3szVpk7Cc_fpoD38WALnrib5FCB",server-nonce. Wird verwendet um noise hinzuzufügen.
"organizationIK" : null,
"code_challenge_method" : "S256",Das Primärsystem generiert einen Code-Verifier und erzeugt darüber einen Hash im Verfahren SHA-256, hier abgekürzt als S256. Teil von PKCE.
"given_name" : "Günther Graf",
"token_type" : "code",
"nonce" : "oY15MU1vgAuMgHomDh9bNOwRn5ZPuIvA",String zu Verhinderung von CSRF-Attacken. Dieser Wert ist optional. Wenn er mitgegeben wird muss der gleiche Wert im abschließend ausgegebenen ID-Token wieder auftauchen. WICHTIG: Darf nicht länger als 512 Zeichen sein.
"client_id" : "gematikTestPs",Die client_id des Clients. Wird bei der Registrierung vergeben.
"scope" : "openid e-rezept",Der Scope entspricht dem zwischen E-Rezept-Fachdienst und IDP festgelegten Wert. Mit diesem antwortet der E-Rezept-Fachdienst bei fehlendem ACCESS_TOKEN und http-Statuscode 401.
"auth_time" : 1744719921,Timestamp der Authentisierung
"redirect_uri" : "http://test-ps.gematik.de/erezept",Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
"state" : "UX24XxI5ElWCaMQRsGYShwCQk_nrJBZJ",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1744719981,Gültigkeit des Tokens
"family_name" : "Otís",
"iat" : 1744719921,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "Q96CwYqSw52E1hkrTCmL_1tq7RKP5iEONuZCo9X4HZk",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "ec2b7506c7500043"A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
} SignatureWas verified using Key puk_idp_sig Encryption infoWas decrypted using Key IDP symmetricEncryptionKey
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde |
key_verifier | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiSnBMRmR3Um5tZ1EwYU9jQmw3dXlJTXBJMFNGMWtOMkdfbHdGRm1qYzBrayIsInkiOiJRT0xfRWI0ZmFWbC02TzM2Q25ZWGVrX1lIMjh0djg3OHBBYi13ZUZGM0F3IiwiY3J2IjoiQlAtMjU2In19..NXPUTifH5FHTurZA.C1ouumSP0oXksfSAGcZ0D1Kxi0HqZRfHNyN4L3CAC-dQHxHOrj3hJsIGZl8pzt_wW6e5pUxy2bNBFd8q07ftabxrQhuTJXgPiu6FIbMKlSJSSR3wux4G1OM3wI9mbN-veQ8-If5NbqI-J_URy5rN_i7KPe_2Io2_1w.zRDC23OXARgZBUWC8SERMg JWE, welches den code_verifier sowie den token_key enthält. Dies ist ein AES-Schlüssel welcher vom Server zur Verschlüsselung der Token-Rückgaben verwendet wird. Headers{"alg":"ECDH-ES","enc":"A256GCM","cty":"JSON","epk":{"kty":"EC","x":"JpLFdwRnmgQ0aOcBl7uyIMpI0SF1kN2G_lwFFmjc0kk","y":"QOL_Eb4faVl-6O36CnYXek_YH28tv878pAb-weFF3Aw","crv":"BP-256"}} Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt. {
Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt.
"alg" : "ECDH-ES",
"enc" : "A256GCM",
"cty" : "JSON",
"epk" : {
"kty" : "EC",
"x" : "JpLFdwRnmgQ0aOcBl7uyIMpI0SF1kN2G_lwFFmjc0kk",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "QOL_Eb4faVl-6O36CnYXek_YH28tv878pAb-weFF3Aw",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"dSkdiEPNvs76vGNomots5i68s7plZmBMy4WSpgmF3Ww","code_verifier":"vO4K9ARk37EI-rLFVDZLbGuJWi1670HAKlhLszGajns"} Enthalten ist der code_verifier (der zu dem code_challenge-Wert aus der initialen Anfrage passen muss) sowie der token_key. Dies ist ein vom Client zufällig gewürfelter AES256-Schlüssel in Base64-URL-Encoding. Der Server benutzt diesen Schlüssel zur Chiffrierung der beiden Token-Rückgaben in der Response (ID- und Access-Token). {
Enthalten ist der code_verifier (der zu dem code_challenge-Wert aus der initialen Anfrage passen muss) sowie der token_key. Dies ist ein vom Client zufällig gewürfelter AES256-Schlüssel in Base64-URL-Encoding. Der Server benutzt diesen Schlüssel zur Chiffrierung der beiden Token-Rückgaben in der Response (ID- und Access-Token).
"token_key" : "dSkdiEPNvs76vGNomots5i68s7plZmBMy4WSpgmF3Ww",
"code_verifier" : "vO4K9ARk37EI-rLFVDZLbGuJWi1670HAKlhLszGajns"
} Encryption infoWas decrypted using Key prk_idp_enc
JWE, welches den code_verifier sowie den token_key enthält. Dies ist ein AES-Schlüssel welcher vom Server zur Verschlüsselung der Token-Rückgaben verwendet wird. |