code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc1MDQyNjkxOX0..ABMApGP_xtjS44xu.P6JqL9Fb47Vkjrqow7gTQAcGopWXOTOu-3kwhL770nyD0P39xaSBzqLcUrae7xQJs1ccccg1C5-O1CKN0ORq5axlbn15ZNweZCFI_3Ntf2yQr9SfPe0bu32JsqSm4k4BITkbUUqTzQ19n3fKsdGPeKn6QcTbCZEc88Si51d7zgQwedrmA-7oA-8D15tsaNsrEbJp3YGB4M6tzy-OOzPNi9gnsLkfYa4DO3uzg3hvRCa-tHgXGovgVbyqW6-CFY1u9tFIYVpl2StkXy-nMvjNJ5fvB2UjE_7Un-N9LUndL8QNDRm9wzFm2EZZ6YUi_pJ6g-rurhnbqbEnJ-EEdWR4GhYevBmuM7NeGL7egUPchc53V0NotYlEnxmNZHeAmsx_-j31WBtaMt24Fkw16xR5A81sPSb9rWbJHAhoFVHLiq8Q5oEEbLfVRyXJHDc_7Z9OcIHD5xa9nh2o_lMoEBqJj2eRRljBAqcp70GpOK1OUgFmWdOh7wr7wNiUX-rc_AM2P91i527ZcRbcEUnO0E7mlCb_3PMYjloADWUeeuRUFkccCh41IjT8aMVeD-MJMf75lD84iBDlYORuZKvVB1fJ89w_oruAzn-5iGYN2fICgkFzXOrDWlhadTw-FN3oswuMMjBJsJAg7Fs8Td61V0gNmWLdi4BAfVS4ZZrFh-WMYOfPsRUZUBdwJS47o1uRX4W5htBuiUiFI8uyzCp3l-93LPV5kHoYMDit0hXgbE36s_iGPRD08yPwv3awJ7cjMOltjQAHcy_2hl6tJagbE-SQIxFtdFvBQobk-rY2N5I3BUlsRV5_A_yepDo7PHCLhqPJvWEz6f2vlaSYRgRcpcU5CX6yqWJvrhE9rcc7jcUlIhL_HJdpY-9Ay77ZsrW5BrUP1UYU-BFv2vSLcZoUMrBraRxRgmmcHEAGZ9O1XLT50d1wG1wBULTXnAi0Fd4FrS1zvWTJptadPll15MbyxixinY_ZnC7Gy7S-q9qgdD81YT954GYHjSRLTUXg5kSu8hXI28hntOdE9A6u1khk5xMG8XN8JiAGY9a5AlmwEPIaE26oED9WH8yuyK1o3mA_iG12KGAWRBnS6vNviwQcnRpoBcqob5pTyp1AM8IX1TP2CGO93Sej18FHRf1rjNIeJEdfU1BXdBYULYlQ_GbvurJsB0MBR9NdO7O9qu5sB3ad8kqK9n65mJ0R1cbvkdEFwdaiMwcjvbRLQiftfUprpUaAblQu1sj8rbLvhl2yVB-z_yfCGB2Io_cQ9oC_Nd9nuJ22K9bAN7N-YPAtFrmbJRGr5H_bYpmS5NTaNyG_1Yk9fo6aKBK5Q3O2kjakU5rHWLxakBepVwgLt7VCdt4PuZM2-lv2wfg-XRqFq8HUbTwY6QLoK9yqYJD40vs2uPMYuTLPW2sV3BGtiSqauCygwq65JnuumVPknJZkdWvs2vjawO5JCv5jNRsMNDPCMEfQnmF-HL9X7XqUDCM.k_C2JJYgCckVddoP6FFJdA 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":1750426919} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1750426919Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozODA5MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZnhRdDBwdUdpTGJhS243RElCSWdkRnlVR0xiYTlvTjgiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJtNERRajRMcFFfdVhoZXV6UGxab3owUzJqSXczNGFlUCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc1MDQyNjg1OSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZDRFZFVGVjFqa09NZ0RSZkNvOXJmUEtoZ0FjRDF0RGgiLCJleHAiOjE3NTA0MjY5MTksImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzUwNDI2ODU5LCJjb2RlX2NoYWxsZW5nZSI6InlsNkI3RGw0MWR1SU03UXY5dFdqaktCdk9yUUtDWHBvcmVJU204c0JJcEEiLCJqdGkiOiJmNzFjYjdhZGZjNDQyYmIyIn0.YKugEp01IOtLcfuGmUcYS2Ei2R5-RbHdkf23WbZpI49nAxJMHR_SnWQxDlPXji-swUALAKJ87CuT4a4sdH7_0Q"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozODA5MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZnhRdDBwdUdpTGJhS243RElCSWdkRnlVR0xiYTlvTjgiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJtNERRajRMcFFfdVhoZXV6UGxab3owUzJqSXczNGFlUCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc1MDQyNjg1OSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZDRFZFVGVjFqa09NZ0RSZkNvOXJmUEtoZ0FjRDF0RGgiLCJleHAiOjE3NTA0MjY5MTksImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzUwNDI2ODU5LCJjb2RlX2NoYWxsZW5nZSI6InlsNkI3RGw0MWR1SU03UXY5dFdqaktCdk9yUUtDWHBvcmVJU204c0JJcEEiLCJqdGkiOiJmNzFjYjdhZGZjNDQyYmIyIn0.YKugEp01IOtLcfuGmUcYS2Ei2R5-RbHdkf23WbZpI49nAxJMHR_SnWQxDlPXji-swUALAKJ87CuT4a4sdH7_0Q"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozODA5MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZnhRdDBwdUdpTGJhS243RElCSWdkRnlVR0xiYTlvTjgiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJtNERRajRMcFFfdVhoZXV6UGxab3owUzJqSXczNGFlUCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc1MDQyNjg1OSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZDRFZFVGVjFqa09NZ0RSZkNvOXJmUEtoZ0FjRDF0RGgiLCJleHAiOjE3NTA0MjY5MTksImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzUwNDI2ODU5LCJjb2RlX2NoYWxsZW5nZSI6InlsNkI3RGw0MWR1SU03UXY5dFdqaktCdk9yUUtDWHBvcmVJU204c0JJcEEiLCJqdGkiOiJmNzFjYjdhZGZjNDQyYmIyIn0.YKugEp01IOtLcfuGmUcYS2Ei2R5-RbHdkf23WbZpI49nAxJMHR_SnWQxDlPXji-swUALAKJ87CuT4a4sdH7_0Q 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":"gematik Musterkasse1GKVNOT-VALID","professionOID":"1.2.276.0.76.4.49","idNummer":"X110675903","amr":["mfa","sc","pin"],"iss":"http://localhost:38091","response_type":"code","snc":"fxQt0puGiLbaKn7DIBIgdFyUGLba9oN8","organizationIK":"999567890","code_challenge_method":"S256","given_name":"Franz Daniel Julian","token_type":"code","nonce":"m4DQj4LpQ_uXheuzPlZoz0S2jIw34aeP","client_id":"eRezeptApp","scope":"openid e-rezept","auth_time":1750426859,"redirect_uri":"http://redirect.gematik.de/erezept","state":"d4EdUFV1jkOMgDRfCo9rfPKhgAcD1tDh","exp":1750426919,"family_name":"Hüllmann","iat":1750426859,"code_challenge":"yl6B7Dl41duIM7Qv9tWjjKBvOrQKCXporeISm8sBIpA","jti":"f71cb7adfc442bb2"} {
"organizationName" : "gematik Musterkasse1GKVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110675903",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:38091",
"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" : "fxQt0puGiLbaKn7DIBIgdFyUGLba9oN8",server-nonce. Wird verwendet um noise hinzuzufügen.
"organizationIK" : "999567890",
"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" : "Franz Daniel Julian",
"token_type" : "code",
"nonce" : "m4DQj4LpQ_uXheuzPlZoz0S2jIw34aeP",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" : "eRezeptApp",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" : 1750426859,Timestamp der Authentisierung
"redirect_uri" : "http://redirect.gematik.de/erezept",Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
"state" : "d4EdUFV1jkOMgDRfCo9rfPKhgAcD1tDh",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1750426919,Gültigkeit des Tokens
"family_name" : "Hüllmann",
"iat" : 1750426859,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "yl6B7Dl41duIM7Qv9tWjjKBvOrQKCXporeISm8sBIpA",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "f71cb7adfc442bb2"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiT3pyM3NFdlo1NHFkYk9SRUFMZFZVRm4xZEhWb0UtSFhwcWN3aS1ZSlB2cyIsInkiOiJORXFNSlpHLXdQOUk5MjA4dlZGNXozV2pEVXRGWUcxdkNILWZKY3JvdmNjIiwiY3J2IjoiQlAtMjU2In19..f1BrEUpwOH8xM0R3.lC7BbxF8kLQxojx_xUo-Wzz36bIBelfPHm3HsgwKMhJm1uv_j82omUGJj-nOL5LreY53_Gi8lxqIjIcHdVW2ALDDgl2-xtghTdpRbDa7179VS10XtECbVgYfVTIvY0sk6kO5HDydzftA14w1bWvX9zcYuUvZvKv6Ew.vrnl8GCgTI7nEMpCEjEXug 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":"Ozr3sEvZ54qdbOREALdVUFn1dHVoE-HXpqcwi-YJPvs","y":"NEqMJZG-wP9I9208vVF5z3WjDUtFYG1vCH-fJcrovcc","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" : "Ozr3sEvZ54qdbOREALdVUFn1dHVoE-HXpqcwi-YJPvs",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "NEqMJZG-wP9I9208vVF5z3WjDUtFYG1vCH-fJcrovcc",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"ycUTa4GMBxZTEW-HW89C4XVa0fxTrYoilyRWgVxHHZs","code_verifier":"9oaH6VEdfXmxZ5AM6q7hP7toGEkm8c-AmLlMK5HZMLA"} 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" : "ycUTa4GMBxZTEW-HW89C4XVa0fxTrYoilyRWgVxHHZs",
"code_verifier" : "9oaH6VEdfXmxZ5AM6q7hP7toGEkm8c-AmLlMK5HZMLA"
} 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. |