code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0Mjk3NTE3Nn0..MRKSv2Ns7JZNqPxT.UKS-V-Dl8QE36Q29Z-obcTex6DB-8ukf8S3hz84odZV_QjIouHkbd1JaADPib0YyyyWHMjpJ9DEYAH0j7Eiuo6CGXX45z7qpB8lyLJoPgb669rzFoTYAvTZcZZQcKRzu_XNWlmYF7McCC8kbQMKSDqI_DCpICZ2E8UkFGb_-5eOcZLXxWx4D7QBSUmHuR0K9zb8xP7le_tMOlgMCCRew2wtrZdWkUHmVkrFXrXE7Ot99bC6UJr8JG9l_jnweby6BdcpiYvdjPrfa-Oi6vXXKJqVxB8xjjLKKq4tmUZtYE1YegJyVEFPVqCK2vDaUi8gTo83vXnyZCaNIePaHS5HhxEa1TIeVKlG1EBmgozefEdEC76dcv-EHeFxIzEhzwLl73NxqV945wlUh48B-QmZkiv30sTOorceYGfmmQ870-Aty9z3YISE0m1RssqgA2tIc0M6fKfoWfMLCq4s3qS7s2AfYRvVzGpHjfxjcVAaBMkP6bfqn3GigwGAfx_UCKhNX5EpMl4-m3g4vO3-EfqmwuxwJ96n1I3_osjeVnt_iugJKcBrBJ4UOBpCGI1XPeRMS2qvivcDBQUMcvZVA0kXdx8M-XVvZjUcG6qV8zetAhtawFzP4ccE_HPwqmpwMW41SAdmsSUKPJsu-NDYP5flSQoIXuZSpxH9yuxk4fPKyha7FudhqpxOp8F6RisaOP9uMonpoMqB5QDgm0BRNpswyMyLBVJfHpxHCKqpqCa3Lu1V5OX4vnguiOrZPCPQTQNkf6dY4VzLA5mb1S7SGUfKoIjKJNL40jNshxCJrgO6Hw_FZVFycfmwZiRo0SK7BzdgtLSK-Cie56kEj0CJle_9og05VuntFClErxC02uKt0-lGXeg8ZWxg8dWTLeDyri45VYCVyIt_066RBaTbhiUjLGseIF4MWhK1JC7E_OzFg1PJ9nhR4CMpEswYm_wHSjIERO2PjzNK0kNSwD8IdUBiyCsgeX5ghRz7pgSQ94Dw1zYPZYjqBRYr0AI9c2hIWtgDRz3McupwwUFCMXkdGYIE5tWRYkMf40pPSWaIFHWVdrkIET0C32WDeo8SYsbKKXjhe7xDrxYMtQzCwHVra2ouNd45fcMGdrmnk2gcFwP6iMLoWMVFOOlAkLggNMGlRWWe_jCevzkL8r1q46bXPQPovhNMH5Hw7TduU1eDNrPZdihMbvDK7enYUhbRh5LaKbLx59uaOzkqi8P6GPAPxci7yE9F_MX1tI3H0JnYCmxI2ziBgf50pMbtvKjplaeo9HQA6RvcR566-uxRRQLvd2yiXFE3ToGOH_KQ-LxHoXGCELaIDCRYNutvXTytWU8918dAxnqxkI56iIsBpUO-h6-VkTIP0Py3EgNQuem3_QX6hCJE8G8GrU4H3cmJBjem_nl8VQIh-qEuygCh1RJVnXKa-e1JEK2zlMNTZ.FZWHRMWlrNAlc3wnbOus-w 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":1742975176} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1742975176Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIzMyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoieklrOGJPSUZwSmhRRVU4cVFaNGdVN1J2bmtqTDFfVWoiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Il9Sd1FIZWQ4QUxiTm9jTTFqMU9RVkJPYjZOcThYcjhDIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQyOTc1MTE2LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IjVtZE9Vclg2QzFXQ2tLUGx5N0djeU9Bb1BTUVlwZkJrIiwiZXhwIjoxNzQyOTc1MTc2LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQyOTc1MTE2LCJjb2RlX2NoYWxsZW5nZSI6InV3Y3JEamIySTZxbjlEYTB6bm5sSHZXWk1FRXc2T3hwYXdiZm5QZWIyaWsiLCJqdGkiOiIwNmQzMDg0OWNlNDlhOTNlIn0.V2dnuUkt13BcLLhEZzvdfB97U1zBqO7sU9l9ACeyK_U2JkfCsKU9rASBFuKXb1AQT3-wqRLDe01A6Dlm4GIg8Q"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIzMyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoieklrOGJPSUZwSmhRRVU4cVFaNGdVN1J2bmtqTDFfVWoiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Il9Sd1FIZWQ4QUxiTm9jTTFqMU9RVkJPYjZOcThYcjhDIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQyOTc1MTE2LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IjVtZE9Vclg2QzFXQ2tLUGx5N0djeU9Bb1BTUVlwZkJrIiwiZXhwIjoxNzQyOTc1MTc2LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQyOTc1MTE2LCJjb2RlX2NoYWxsZW5nZSI6InV3Y3JEamIySTZxbjlEYTB6bm5sSHZXWk1FRXc2T3hwYXdiZm5QZWIyaWsiLCJqdGkiOiIwNmQzMDg0OWNlNDlhOTNlIn0.V2dnuUkt13BcLLhEZzvdfB97U1zBqO7sU9l9ACeyK_U2JkfCsKU9rASBFuKXb1AQT3-wqRLDe01A6Dlm4GIg8Q"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIzMyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoieklrOGJPSUZwSmhRRVU4cVFaNGdVN1J2bmtqTDFfVWoiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6Il9Sd1FIZWQ4QUxiTm9jTTFqMU9RVkJPYjZOcThYcjhDIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzQyOTc1MTE2LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IjVtZE9Vclg2QzFXQ2tLUGx5N0djeU9Bb1BTUVlwZkJrIiwiZXhwIjoxNzQyOTc1MTc2LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQyOTc1MTE2LCJjb2RlX2NoYWxsZW5nZSI6InV3Y3JEamIySTZxbjlEYTB6bm5sSHZXWk1FRXc2T3hwYXdiZm5QZWIyaWsiLCJqdGkiOiIwNmQzMDg0OWNlNDlhOTNlIn0.V2dnuUkt13BcLLhEZzvdfB97U1zBqO7sU9l9ACeyK_U2JkfCsKU9rASBFuKXb1AQT3-wqRLDe01A6Dlm4GIg8Q 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:36233","response_type":"code","snc":"zIk8bOIFpJhQEU8qQZ4gU7RvnkjL1_Uj","organizationIK":null,"code_challenge_method":"S256","given_name":"Günther Graf","token_type":"code","nonce":"_RwQHed8ALbNocM1j1OQVBOb6Nq8Xr8C","client_id":"gematikTestPs","scope":"e-rezept openid","auth_time":1742975116,"redirect_uri":"http://test-ps.gematik.de/erezept","state":"5mdOUrX6C1WCkKPly7GcyOAoPSQYpfBk","exp":1742975176,"family_name":"Otís","iat":1742975116,"code_challenge":"uwcrDjb2I6qn9Da0znnlHvWZMEEw6OxpawbfnPeb2ik","jti":"06d30849ce49a93e"} {
"organizationName" : null,
"professionOID" : "1.2.276.0.76.4.30",
"idNummer" : "1-HBA-Testkarte-883110000129084",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:36233",
"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" : "zIk8bOIFpJhQEU8qQZ4gU7RvnkjL1_Uj",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" : "_RwQHed8ALbNocM1j1OQVBOb6Nq8Xr8C",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" : 1742975116,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" : "5mdOUrX6C1WCkKPly7GcyOAoPSQYpfBk",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1742975176,Gültigkeit des Tokens
"family_name" : "Otís",
"iat" : 1742975116,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "uwcrDjb2I6qn9Da0znnlHvWZMEEw6OxpawbfnPeb2ik",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "06d30849ce49a93e"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiZXdUZ2VxZjdnaE5pdDY4Rl8wa21EWUhhSlNHcmtvaEFTbzktS2dydmtrTSIsInkiOiJoaVRfT1lkOEpsTGFqUzNDeG5zTXROLVRpc1U1a0pEaTNhQVBlUlFNSTgwIiwiY3J2IjoiQlAtMjU2In19..XZFylIH1c55Yl2eW.1ScQe5Zn_i3dgHgJraIQbfzgvKt8ivpLa9rjH08-TbF6dTt7t6gmsaW9lpxQrLFvf1g5IB7ltV7hvihP1j_xHbWtllcTzpsl_mRmT2HBkvHh3f4_sPCEjaqGagANjrFYGtZaBfXEhZe3ybY4uMOqtPn0bh3Be9nEvg.l0-qfjWp5Y6MPPfLsw__ow 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":"ewTgeqf7ghNit68F_0kmDYHaJSGrkohASo9-KgrvkkM","y":"hiT_OYd8JlLajS3CxnsMtN-TisU5kJDi3aAPeRQMI80","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" : "ewTgeqf7ghNit68F_0kmDYHaJSGrkohASo9-KgrvkkM",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "hiT_OYd8JlLajS3CxnsMtN-TisU5kJDi3aAPeRQMI80",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"TTLHzpNsVUlEdcdFD8KtAOvP60qKgA8fONNWzsRi1Sg","code_verifier":"Y6VKyinEAE9H3nb7ZWKORQId3FbwEjXdODT7KbNfGqU"} 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" : "TTLHzpNsVUlEdcdFD8KtAOvP60qKgA8fONNWzsRi1Sg",
"code_verifier" : "Y6VKyinEAE9H3nb7ZWKORQId3FbwEjXdODT7KbNfGqU"
} 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. |