code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc1MDQyNjkzN30..TOFf7ur3_LcHnnYA.eygq01-whbvMeHvOjyX5KWrahhxA7I96Q5CX-ZxinVblLS_2vhsq90ExTuVySs4MiVLLYmm4wyUzMBQP-p-Et0V1fQZc4XAB0mjVEd7agPcm3Mf2QL-xVGI42Uhb6984QLAyOVmZokKz05F9EUtiSQI3Oez3KzZrFTn6H4CbEErqeQr40bid5To8rN07tLWJpneEKEUUC8BP9KiWpYpBRpkZ-tJeUe8BBxmIx77d0lhe-i3QX0_5S_uigPoR_R2NAjgZWZDzb4Ci0fm65rKe7DEelsdYHlrmLELcAa-a-nQLibnOILCePmlX_QZo9lb6pZ41hM-MGc6vIvFej-RC91S2Let1o7aGkbu1aPFGx3M3R0EqzlMojrQjJbaZ4h8w6xWhRfgiX-5iaaVDKUpujWI_UGQV7L9BNFY9W6i3VSmbZwaPYEMXME4Aied9oBnhc1lQRSnAgJthHUF6buP3wlylFJkmz26mszSim3tdpxXLfpzbAp37pbLHWoufR_97MhihbC8qksGHjhWOeH6FxdeOn2aP82gIJtmmZP8dUm1UfYccBpAM82SrRBWzKqtugU-xVQx5mS_LDuHE6jweMeuqBZdu1fX3xmxTHabkZ5DwdKX66OzniqMu0lcf0ziZ4ptI6O7WXgVbLAxw2kPUCvGaH682ayWVgbCM0nVyJ3rRMs--0t9KfpvnSKNevxfE8Em_u06RXCby8f-w76FDKqHOoU--uvRWC2ptLNnaw3_smrEu4EziXrjsKI-TZLw9ruzdDb9qmvBk_26EEEVa-h2HenI1KMavDF4-AZmeYCWxKjZF_5zUsEKdxSR8AciivUMXARPIWtPcSac6fG8RocRs21NGsqSIUOCVlEhq6TlIRoroSiD_V3Gy0_q16qjO1DJs01XZRNBp6QtW5xaIltFfbTBmyxfXETsPy9W4Tdg4OPmQJmWMSkeE2dyUuuPBYWSqx5vvCUEdf6j0wgn7Kl_8ho17YZQtCJzxJBAfdN0XyMriBi8UA4uDh892j9Ly0X6Upil1zU7Y6a29TsqzePrSLx7rr-vaXQKadMfB-5w3lQ7IfuiwPhKPPHZDdgwkMNBXZMVM2ehNl6SJr4nhdVWGvSlHs4xqsLksqR95py1gKl7lvkjVLYtHzQfeqjyEloaXeVOaBbHIswUQgz-Z0P985HDRAA9idaibi_F7aFfPcVfnpweNGfKUDxvMu0KyUwxMkMxEMYpvCJXJOg5WKbxjFOO-eH6naJ_JPowWPRA_EDG49asHZXDFlDdesuM_BQbx_EPkhZK4XH1PcvUFagrhviOWpi_NL_s_XKbiee7c9xVK4kR-V0dBwnW0dWgTuA312rEWNArkvXyWZjqI3iA2ukIhZpNayFkuY5-XPR6bqe0P5XJbPvIT-hVhME02KVP8EfaQT3u9S6r04krclJrHOyQ_buTV.CELNO-XAAujpZ-3rJnrG6g 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":1750426937} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1750426937Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzM0MyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiSHRBOE83aldJQzRNVlN5eWx1aWlIX0RjMFh3U3hzYjgiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6InhQdEJKQ2std04tUHFoVjBzbUV2THhlZ1pYYUtDVEFXIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzUwNDI2ODc3LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlJNSkdtNFZ0TWlVS3VOT1Iyd3JRZ1FlT0hxbWgwZWNrIiwiZXhwIjoxNzUwNDI2OTM3LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzUwNDI2ODc3LCJjb2RlX2NoYWxsZW5nZSI6IkhuUGtqbzQyaWR6M3M0MW9vMjlmNzBnOUJsaXhCMHFlelZKdkJBNHlYMTgiLCJqdGkiOiIxYmZiMmI5OTZlZWI4NTNiIn0.KXsrUz7yyVHI6JkvORObLbqDXC-6equB8oNWxS3pYDd2SpowbGp-PFgNpIdeRkHdTiKfExo0u7UneeSLw2xLNw"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzM0MyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiSHRBOE83aldJQzRNVlN5eWx1aWlIX0RjMFh3U3hzYjgiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6InhQdEJKQ2std04tUHFoVjBzbUV2THhlZ1pYYUtDVEFXIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzUwNDI2ODc3LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlJNSkdtNFZ0TWlVS3VOT1Iyd3JRZ1FlT0hxbWgwZWNrIiwiZXhwIjoxNzUwNDI2OTM3LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzUwNDI2ODc3LCJjb2RlX2NoYWxsZW5nZSI6IkhuUGtqbzQyaWR6M3M0MW9vMjlmNzBnOUJsaXhCMHFlelZKdkJBNHlYMTgiLCJqdGkiOiIxYmZiMmI5OTZlZWI4NTNiIn0.KXsrUz7yyVHI6JkvORObLbqDXC-6equB8oNWxS3pYDd2SpowbGp-PFgNpIdeRkHdTiKfExo0u7UneeSLw2xLNw"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzM0MyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiSHRBOE83aldJQzRNVlN5eWx1aWlIX0RjMFh3U3hzYjgiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6InhQdEJKQ2std04tUHFoVjBzbUV2THhlZ1pYYUtDVEFXIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzUwNDI2ODc3LCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlJNSkdtNFZ0TWlVS3VOT1Iyd3JRZ1FlT0hxbWgwZWNrIiwiZXhwIjoxNzUwNDI2OTM3LCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzUwNDI2ODc3LCJjb2RlX2NoYWxsZW5nZSI6IkhuUGtqbzQyaWR6M3M0MW9vMjlmNzBnOUJsaXhCMHFlelZKdkJBNHlYMTgiLCJqdGkiOiIxYmZiMmI5OTZlZWI4NTNiIn0.KXsrUz7yyVHI6JkvORObLbqDXC-6equB8oNWxS3pYDd2SpowbGp-PFgNpIdeRkHdTiKfExo0u7UneeSLw2xLNw 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:43343","response_type":"code","snc":"HtA8O7jWIC4MVSyyluiiH_Dc0XwSxsb8","organizationIK":null,"code_challenge_method":"S256","given_name":"Günther Graf","token_type":"code","nonce":"xPtBJCk-wN-PqhV0smEvLxegZXaKCTAW","client_id":"gematikTestPs","scope":"openid e-rezept","auth_time":1750426877,"redirect_uri":"http://test-ps.gematik.de/erezept","state":"RMJGm4VtMiUKuNOR2wrQgQeOHqmh0eck","exp":1750426937,"family_name":"Otís","iat":1750426877,"code_challenge":"HnPkjo42idz3s41oo29f70g9BlixB0qezVJvBA4yX18","jti":"1bfb2b996eeb853b"} {
"organizationName" : null,
"professionOID" : "1.2.276.0.76.4.30",
"idNummer" : "1-HBA-Testkarte-883110000129084",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:43343",
"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" : "HtA8O7jWIC4MVSyyluiiH_Dc0XwSxsb8",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" : "xPtBJCk-wN-PqhV0smEvLxegZXaKCTAW",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" : 1750426877,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" : "RMJGm4VtMiUKuNOR2wrQgQeOHqmh0eck",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1750426937,Gültigkeit des Tokens
"family_name" : "Otís",
"iat" : 1750426877,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "HnPkjo42idz3s41oo29f70g9BlixB0qezVJvBA4yX18",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "1bfb2b996eeb853b"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoialdQd1hCdEF4VVpwUkdpakpfQnR0bGR3dk9EYlVRVEJ5V1RNYTI2eE5mayIsInkiOiJZU1BkUFd4U0dTMzMwOC1HaFp3aXROUklibkdrQnFqOHh2Tkl6NnM3VEs0IiwiY3J2IjoiQlAtMjU2In19..Sp3r8eznLWC-KrDf.5acSdZGIFxEZK0Bzo1BV47lQY94FoDIQQ2m2CPaZgUH2-bOgHUqGiEaLhLNXDpdJHY06fYSyeA9MhdQuvz5vJY4_6ONvXz-QCQegb5OwJt6yFKi5qpO0TyXv8ubjGgxZYpTA6SqvH2mrJ2bA_77edY5Dg5D2uBlfww.cMNISWpH2npP91zIK2FHfw 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":"jWPwXBtAxUZpRGijJ_BttldwvODbUQTByWTMa26xNfk","y":"YSPdPWxSGS3308-GhZwitNRIbnGkBqj8xvNIz6s7TK4","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" : "jWPwXBtAxUZpRGijJ_BttldwvODbUQTByWTMa26xNfk",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "YSPdPWxSGS3308-GhZwitNRIbnGkBqj8xvNIz6s7TK4",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"-LbQ4iUHTyQAVhsRdNK0Jgkb66zLTy5k3-tDRjpcaYc","code_verifier":"oNFsdKZWZwZf_w3IHmXAuL9XQLKt50RZy6PwJNoHEPo"} 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" : "-LbQ4iUHTyQAVhsRdNK0Jgkb66zLTy5k3-tDRjpcaYc",
"code_verifier" : "oNFsdKZWZwZf_w3IHmXAuL9XQLKt50RZy6PwJNoHEPo"
} 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. |