code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NzEzNzQ5MX0..bH-D4L5hvw42JopR.sLUF8tkmdG-a2RMay8faJXTcZ02fe3l40RSyvclDmyue5X7v-zggMqAcwP2BG5Dq91tSEx-CcLU9Y8dmR6CPle4ABBI9J_48MNKBKmQI0usnubbmfeAwK-XQ3AI9hUVBVtBpT42fBIEAberAj4evSHWT1MVbKAxABW-euNCnPcZmipscuZsQoAk8g1VenI46BvpkdiS8uP8CSDpA6ARd7Ddk3g8qQClhH-EmsrdkW3eLaMAEFJhbdxAYwt5aQDRe1gCXqlIAggEFwyWmFDJy4X6q9piL6p_JQeOofKe_diKbm6oyICU3AVySyCXPInfVi0346NvUTsmTrpHhiCal9P-TfMAFOobdzqkmNp-iO1Mg-YL3NhgzHYKgPfEK71UKnlnWzbqCnlEbzj3k7vHCdo1HFLJGOrPbIiLi_pQIbuVoFu7ZFGZ4isNTYUxfE3JWUQV-z399oajsGpYiA9ygANUw7KIjW_GitPFKXerfITsaYjHHKvmbsYl40IhKFHha7RFPCYiuOZ1Kqzli0_-kJsz4sFJFfnzZEEmdxsbBvy9DR-z3wMKOpqEOPGWzhJmIJ6ckYmfYbyemYvHjQf0LsVmFORs428yxISTUh6dR83ta1C8XzhFzQ_TgAOERSgK_k7Qx6YklyL21N_zNFMoqyYpyPWltxbQlFMv92i77AsyHlUoiDA3E055P6mrTu0r1F5TmAjy3zTSuA2Z0o-k9dRN_Mo76UumuU2VEw-NZ_rTu8B3zWpPKdLBuL7Ljz7sFVLT_7k1YwK_vqWayCpeAlPz9bdOIJBzS_y0THSLHOqkCHYM7uj67Nk71WtChqlxAC4cBVJMACWjsndSw-ZCeoUgljHV3yZAlyS4C8b151g5B2YfQq1VaNtySvEKiNTHg3gm-eC-J3pUz_QxqNPLQqw9lMFMXTtbpXdc1ovhwMq8Kn7B945UCNhsNsCZ6rLnBR880zxheDkjl7BlDizaAS73jsNp-latrSREexZG_RZwlevQsrOZnqH02CdqjlBBV40148jkG3H0RGUPgRf7NS5xGGqw_itrey2HR0Pd3UwE0UmHV04otlrMtGLDq-4VrVCGCiZO3J4ofpKlFEYIXVhWfHLUaD0i3W9tC2edcKlWB_phHRXh1Au5WjFCkksptR9KNO-VVoaXLbzhsAB1_OFvanvi1rc31eHOUzGF_1me4LIFrG8ophl2HhkErp21xLs_e-QubQXErzUC0hurN4n6t8Gr7QJh_hB6At65bD8a02pzfpE_0vcPn7K1WD6kx0ejJYJjM7TOFCE5haQAKyXan0XBXKeqjRPQ_ZqIj0zqthEW1Domd7jTzz89PoPEoKqi29qbBfzSDCPWb-oN7G-RGRoGaGtofpKuOFKl-lRI40TBTCZqnQWAZJQclB3eOa8tk2AX0vHWI5Ig0_8JRMJA9Yjfn7BsB.9hrO6GV-5t8a3R830uDxuQ 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":1747137491} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1747137491Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIxMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZG82U0kxVExTcGdBdVhCeHJlbDNmSmp5YzBZbHN2alAiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6IkV6MEtPdmxUYlR5VzhuV09DMmY5RWtqYmhrMzJkc3JwIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ3MTM3NDMxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IktLNGJnNkNRQzZna2pMY1NSaEJWWGgzMHFBeU9FbElKIiwiZXhwIjoxNzQ3MTM3NDkxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ3MTM3NDMxLCJjb2RlX2NoYWxsZW5nZSI6InFJdDVHNzVRQ0ZRazRwSC1QSHE5eGFFSklKak84c2drNkNRMmtjTC1mWTgiLCJqdGkiOiJlN2YwOTcxMDYyYzFlZDgyIn0.g8r2oUKpf45AqypliakE63z2aL6h00B1iK2JTJCbW2k5iVOblWgnNbii6ppCteFgkVkz46xsLtEH2l2V-K7omg"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIxMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZG82U0kxVExTcGdBdVhCeHJlbDNmSmp5YzBZbHN2alAiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6IkV6MEtPdmxUYlR5VzhuV09DMmY5RWtqYmhrMzJkc3JwIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ3MTM3NDMxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IktLNGJnNkNRQzZna2pMY1NSaEJWWGgzMHFBeU9FbElKIiwiZXhwIjoxNzQ3MTM3NDkxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ3MTM3NDMxLCJjb2RlX2NoYWxsZW5nZSI6InFJdDVHNzVRQ0ZRazRwSC1QSHE5eGFFSklKak84c2drNkNRMmtjTC1mWTgiLCJqdGkiOiJlN2YwOTcxMDYyYzFlZDgyIn0.g8r2oUKpf45AqypliakE63z2aL6h00B1iK2JTJCbW2k5iVOblWgnNbii6ppCteFgkVkz46xsLtEH2l2V-K7omg"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjIxMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZG82U0kxVExTcGdBdVhCeHJlbDNmSmp5YzBZbHN2alAiLCJvcmdhbml6YXRpb25JSyI6bnVsbCwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwidG9rZW5fdHlwZSI6ImNvZGUiLCJub25jZSI6IkV6MEtPdmxUYlR5VzhuV09DMmY5RWtqYmhrMzJkc3JwIiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzQ3MTM3NDMxLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdC1wcy5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IktLNGJnNkNRQzZna2pMY1NSaEJWWGgzMHFBeU9FbElKIiwiZXhwIjoxNzQ3MTM3NDkxLCJmYW1pbHlfbmFtZSI6Ik90w61zIiwiaWF0IjoxNzQ3MTM3NDMxLCJjb2RlX2NoYWxsZW5nZSI6InFJdDVHNzVRQ0ZRazRwSC1QSHE5eGFFSklKak84c2drNkNRMmtjTC1mWTgiLCJqdGkiOiJlN2YwOTcxMDYyYzFlZDgyIn0.g8r2oUKpf45AqypliakE63z2aL6h00B1iK2JTJCbW2k5iVOblWgnNbii6ppCteFgkVkz46xsLtEH2l2V-K7omg 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:36211","response_type":"code","snc":"do6SI1TLSpgAuXBxrel3fJjyc0YlsvjP","organizationIK":null,"code_challenge_method":"S256","given_name":"Günther Graf","token_type":"code","nonce":"Ez0KOvlTbTyW8nWOC2f9Ekjbhk32dsrp","client_id":"gematikTestPs","scope":"openid e-rezept","auth_time":1747137431,"redirect_uri":"http://test-ps.gematik.de/erezept","state":"KK4bg6CQC6gkjLcSRhBVXh30qAyOElIJ","exp":1747137491,"family_name":"Otís","iat":1747137431,"code_challenge":"qIt5G75QCFQk4pH-PHq9xaEJIJjO8sgk6CQ2kcL-fY8","jti":"e7f0971062c1ed82"} {
"organizationName" : null,
"professionOID" : "1.2.276.0.76.4.30",
"idNummer" : "1-HBA-Testkarte-883110000129084",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:36211",
"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" : "do6SI1TLSpgAuXBxrel3fJjyc0YlsvjP",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" : "Ez0KOvlTbTyW8nWOC2f9Ekjbhk32dsrp",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" : 1747137431,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" : "KK4bg6CQC6gkjLcSRhBVXh30qAyOElIJ",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1747137491,Gültigkeit des Tokens
"family_name" : "Otís",
"iat" : 1747137431,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "qIt5G75QCFQk4pH-PHq9xaEJIJjO8sgk6CQ2kcL-fY8",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "e7f0971062c1ed82"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoicVd4d01tUE5Sci0yaDNyaDZnNUczc1hXRE5QVkU4enliYmR1N29naHQ2YyIsInkiOiJJX2V4YkVMWlJSdmRITmEyVFY1OEhJU2NpbWVfNk0wU3Voc21fVzFBYWNrIiwiY3J2IjoiQlAtMjU2In19..cSHYBVsL7RWXAXxd.9xgUMLavkDhPgj3xuCD7BvU5uxvNMRjAi6y8ECpBTw1L0cJP0PYNgOWn_1vY6LB-7lU9YQp-eA0oyH7-BLYiKby243vdaKgfwbIyRNjUXmKCLDNp8wFEEpsHv1F0hPdKzWDKFIkdsvV0aNHRf4u1zLUXeX8qd7KJnQ.ErHX7SVcqPHsfV4hAwLocA 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":"qWxwMmPNRr-2h3rh6g5G3sXWDNPVE8zybbdu7oght6c","y":"I_exbELZRRvdHNa2TV58HIScime_6M0Suhsm_W1Aack","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" : "qWxwMmPNRr-2h3rh6g5G3sXWDNPVE8zybbdu7oght6c",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "I_exbELZRRvdHNa2TV58HIScime_6M0Suhsm_W1Aack",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"ctXLMHKWUbQYKFtk9q3Nx029qzsSRxMo2AhBC2579F0","code_verifier":"ikEwiRiY9SuNf4ffqjspiiKeSPvc6xrXuex08dinXqA"} 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" : "ctXLMHKWUbQYKFtk9q3Nx029qzsSRxMo2AhBC2579F0",
"code_verifier" : "ikEwiRiY9SuNf4ffqjspiiKeSPvc6xrXuex08dinXqA"
} 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. |