code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NTU3MzA5MH0..1rhygNfO0UOb2YPb.I7m-FoGk6guzMk38sfQRhQFVNCYrQI4cjC0TA9svdjRQX3KxCa2FVq1HZ69rm9NRx4PkhNLxHHbRzj5ihajCbw8wTtSbuV9jTGb3Xt5jv-Tds66zxZMQz_ChvnsEgEETrnFsk-oc7tBUZ7WNFvjKsW8GEDuIbWbs6JwU1zEyAmbZZczkCYmjXREIpveMENLc-535yFGJRGkmPTiTuxsogOCv_WWbALwwCgRBJRznU_NTw29fg9J1qmOIe8g2Kimg9g2SWqfY8nRdRgRR3w2AKPhG4fYVB7MArCthAMJsk-ablbj94aPWTT_aKy4L1P4ogA8ulq7ZZSv-yKvVKmsrdpNybF8wE2ShjgLRSI_Jpr4Qxv2vmzOQantLbwrLSlNO0euBXVLPzr_jpA6OvFOYcrS3YWuRQwMvR6Apvoi5LDkw1dh9AvmBBXMaIE1GwsOVIJF-z0LAZimkkjkPeB2AliZ4_n9kfebPxkzv8mbD6Vy47HuW4Gs50EZklhl0caw_kNCLHVf_ma7h88J5LBmuMoRuDuCZu7M0hZxlo0EWNOIbOvwDkxgcSQv_FJylhFPrctNNtfrjElEuG2GNAaRLG2UP0IxHoYNjhEEeDdLc1x6ObfQG4kqoKIuyiedUuFDrzftj4qPu4aNbFV2bPDjvzcKL9aHc_a7PHEF0leX7LIU5Y684Abn1TFGcA-cxlZqFt5YnjnwympcQzOGhT-4GHJDSh5GoyJ1--N-Cg3CydJUXjWFcSHYOasBobuq7tlsmzugxOdbPuAqajQV6yVsEdq3aplclf8QbRwHwE_htsJXOcPMxPE3efTUMxmZOy1sN7so12LluyYQHgXVt6AgUkUXKOGLA_L1SQNLx-0D4vI3l9KCn45oXJXNWXmMCihqrmlB_X7pJKFi3MSYxSGpB__0d8WbYeddx4iie1KFCP4szwLbRpm-Qz_L2cv1oNJ9gRTJVowhyNA56LQxNPDe9qxY_Bor9oHqS0SO-kjTXsfM3eFVT0qldRypmWCSIjk_zc8wGsz8UwvY-gbc6wKgK-YifLej-7rOTvX2MlmAkHnobrG_ncWKdhDdlEj7P1muDHwUZNJzSHJzsuWIpxGeWwIpDbjxQN3Wcl_2toOnK7YMoOAjYrWKINlTq53ar8VX8VcLxh7-oDH0R0R1i62ulGh05XDxTt2M9e7Yp0yBcpUeFPSpcg0rAMHw05mBW-UFc-RFSCChhugtwvS1IBAjdOi0j0FTzXrd8ClB90tc9B9ie9MnnfzYY90iCx2pVh7Ne3WM2BEqIbGP05lqOBN8ZyT_CxjjXRqPaEl39m8RqIOuNgE7nyV2pnzfWFmC4OjJ8gTMjlNl1SAlgseP1bSPH0RA_nYjCeIAjDFGz7GWVZPHyMhU6onD5Ibck6rihG1wyzIj1PtpvvCuVt70f6No7uYdEHUDJ6SRJ.5hpAoQV_l8kv6oMilvTeAA 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":1745573090} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1745573090Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NDM4NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT0lJb3ptVmFscVJ0aDB0UFVDeVBiU19RcTJ3Z01zdnQiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Ik85OW96a3BPZElUd2dseVdzTWhGQVozSmxES1YtSUpvIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQ1NTczMDMwLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6InNJOWo1X1ZaVTBld3RfRlRNQnUxMHc5MHNIN3JQN2FLIiwiZXhwIjoxNzQ1NTczMDkwLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ1NTczMDMwLCJjb2RlX2NoYWxsZW5nZSI6IlZVdlVzOEh0eVh6XzMyczkwZjJUblB1bjFYX3BMdVVvUkNnVExNdHFWaEEiLCJqdGkiOiJmNmIyYWU5YWQ2NDViMmNhIn0.PXUUT8XJVaPQZNGZnD-89XsydogMofOsi5u5-pV8104V4vxEkuH_IFmnIWYTa7fv_lx5hzUIk-3lh_q0ZTIP_A"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NDM4NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT0lJb3ptVmFscVJ0aDB0UFVDeVBiU19RcTJ3Z01zdnQiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Ik85OW96a3BPZElUd2dseVdzTWhGQVozSmxES1YtSUpvIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQ1NTczMDMwLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6InNJOWo1X1ZaVTBld3RfRlRNQnUxMHc5MHNIN3JQN2FLIiwiZXhwIjoxNzQ1NTczMDkwLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ1NTczMDMwLCJjb2RlX2NoYWxsZW5nZSI6IlZVdlVzOEh0eVh6XzMyczkwZjJUblB1bjFYX3BMdVVvUkNnVExNdHFWaEEiLCJqdGkiOiJmNmIyYWU5YWQ2NDViMmNhIn0.PXUUT8XJVaPQZNGZnD-89XsydogMofOsi5u5-pV8104V4vxEkuH_IFmnIWYTa7fv_lx5hzUIk-3lh_q0ZTIP_A"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NDM4NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT0lJb3ptVmFscVJ0aDB0UFVDeVBiU19RcTJ3Z01zdnQiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Ik85OW96a3BPZElUd2dseVdzTWhGQVozSmxES1YtSUpvIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQ1NTczMDMwLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6InNJOWo1X1ZaVTBld3RfRlRNQnUxMHc5MHNIN3JQN2FLIiwiZXhwIjoxNzQ1NTczMDkwLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ1NTczMDMwLCJjb2RlX2NoYWxsZW5nZSI6IlZVdlVzOEh0eVh6XzMyczkwZjJUblB1bjFYX3BMdVVvUkNnVExNdHFWaEEiLCJqdGkiOiJmNmIyYWU5YWQ2NDViMmNhIn0.PXUUT8XJVaPQZNGZnD-89XsydogMofOsi5u5-pV8104V4vxEkuH_IFmnIWYTa7fv_lx5hzUIk-3lh_q0ZTIP_A 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:44387","response_type":"code","snc":"OIIozmValqRth0tPUCyPbS_Qq2wgMsvt","organizationIK":null,"code_challenge_method":"S256","given_name":"Günther Graf","token_type":"code","nonce":"O99ozkpOdITwglyWsMhFAZ3JlDKV-IJo","client_id":"gematikTestPs","scope":"e-rezept openid","auth_time":1745573030,"redirect_uri":"http://test-ps.gematik.de/erezept","state":"sI9j5_VZU0ewt_FTMBu10w90sH7rP7aK","exp":1745573090,"family_name":"Otís","iat":1745573030,"code_challenge":"VUvUs8HtyXz_32s90f2TnPun1X_pLuUoRCgTLMtqVhA","jti":"f6b2ae9ad645b2ca"} {
"organizationName" : null,
"professionOID" : "1.2.276.0.76.4.30",
"idNummer" : "1-HBA-Testkarte-883110000129084",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:44387",
"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" : "OIIozmValqRth0tPUCyPbS_Qq2wgMsvt",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" : "O99ozkpOdITwglyWsMhFAZ3JlDKV-IJo",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" : "e-rezept openid",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" : 1745573030,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" : "sI9j5_VZU0ewt_FTMBu10w90sH7rP7aK",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1745573090,Gültigkeit des Tokens
"family_name" : "Otís",
"iat" : 1745573030,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "VUvUs8HtyXz_32s90f2TnPun1X_pLuUoRCgTLMtqVhA",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "f6b2ae9ad645b2ca"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiQ1BPem9CQXVkYzdxNlEyTUs5QUxUazRSbzZaV2RVQ0NSR0F3eWtqX1psWSIsInkiOiJWLVNhY3ZMWnlmLXNKSms5NGFJbFMxNlFUTFhGR0VTNHRFQVAtbFVMRFpnIiwiY3J2IjoiQlAtMjU2In19..3EHSDgEr51-ljxlw.VliyAR8lYeYSqEFBabrfXfAY9lu_YaiVz2MbBThTC3n8vajx0_-c_7ji1wSlpPUNdpOMH1JVxx1kroFF81q-dfok8f4DHjoprTpfPpHdgjJdBTGztc3Uzr2SOq3Tf9CXxV0ifUJnflLrPXpkhPyNoTJDmWvu-V-lkA.ewtQ868PlhIS6EE6fclOEA 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":"CPOzoBAudc7q6Q2MK9ALTk4Ro6ZWdUCCRGAwykj_ZlY","y":"V-SacvLZyf-sJJk94aIlS16QTLXFGES4tEAP-lULDZg","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" : "CPOzoBAudc7q6Q2MK9ALTk4Ro6ZWdUCCRGAwykj_ZlY",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "V-SacvLZyf-sJJk94aIlS16QTLXFGES4tEAP-lULDZg",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"7jwCyl618Y-pKLY1KNfT_F_FwxvTRja0Y8U7PZqD49Q","code_verifier":"Eb0-zjAXCouJQM1FcqLhNzHS2WfwPINzCbKhqPyXSTs"} 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" : "7jwCyl618Y-pKLY1KNfT_F_FwxvTRja0Y8U7PZqD49Q",
"code_verifier" : "Eb0-zjAXCouJQM1FcqLhNzHS2WfwPINzCbKhqPyXSTs"
} 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. |