code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0Mjk3NTE1N30..7XaBEbZEGaqSn3L5.Rkvx3__5na9NLGvC-LkV4wnikGoBW_7f6k5g6bDQKquIRgRAgYvYe-Mj-8ojXmf1TlLhkXIeM6wIAPcgQifnhyDjALeMC71DHO2gIwsodZnm1w_HNXQHX-nAqCY0NvPHPZDZbvAyZF8gNfMuI28dX5w0EIY7VlHxFqXa96ax0k5EDz6EXoWiofiunwfG_QyBN14klLanzH2EIg8R4zOlWpoSaael_fDi79SwuNDAe4owm80ZC8Z8BBggkHSahBBUyHEiCwVaD08k-H1N7lcWalU0_zL9-oZ_FffLR8JbF29tYOI2h0Ls4mfIH_dLGzvpH9GtT1ZQAtk_4RryKAtZTKS3oRU1A0es9nkvunHA_sx77GllxnfBniSnqPISaB1g1L8jD4KlS39xSH7EE0BVRHJiCzMON1zuD-rdTe4fMVBgmVQo9UpzKO17nSdIuX9yg3H8ODVllLuBWQ7Ey6UAbu7ZohE0t9P1s8Jxh_xheYyfRsZC2LfVWLAL5uB9VU4CQJ7I6Lnow5oLdeL9SoYFu1uvCjW5eKCSZsStvFpy-4jFICsyGL13TfCUHbxCElQgckWFtY0usCRTGdTNVm9qQKoAmY4HTFQW_1loD9Bo31H-HlggJFG2yTPsXkL03EjaDi1Av1hFnaH49dzM4C8Llvwv3FT4Jzf3NElQiOz7itjirObeXCRi_qiNf_1kJxh9QgXuBVU_EGeWVuOHen0lZy40BI1m21pX94Z4pPq7O97rVth_s0Zzlfw6YwuFZDjrnRVtzSEoQYchUffA3OvI4xAx-nBmQGkPClHyrMdAdfFV-hTBgjwFgnUl1-pp98ALipsbCFCtqYP4Z28Zmw2jwe5t67CAJ7FUR-pkXCx6Kf55C7GnuHL6nXOotqYvOYdXIqCXkCwQYL2yfm33Yy2HF0aCpclma2KzCneM4zT-DKHvXBfLiven-YK4I3uQco1wG3rUZ2X19JHr3tKX64fGXDJwHQen9AJsx4MfiNWCS6u2MVd6Wu-5vDdoINlWI4kxQ50Mw4GXnB_UKwJBmQZeVQLXhQ3BfFXoD68zeaiTEySJ2cqZ4T91OywT9tEvGT4ULyliF58MJJPV3qfvuNYYcOVq5DM-8YrwsnztTDgCU0Ii2yQaY4cy2rnre8OWu46adJ2V5vUoe6FWHMAGTv91DnEgRfwoWogxZbwulAXhwkpt1CPAu9nsICSe7503tt3gczi87EeoZ-J2igQFXfN0sr35llXQVixRgw98sEy6UhNB8L8SUuUNwfrvcWF3GLM9t2oixXHjQf4r_i-ln-eiCIRIKNgNHwvrUMKbY19SvAH7ywyNU6kl0XIyL68pt40MT7ERxgENhjj5RFphBknOvUYNT21vDbaNF3Ytzq-4oimf0zw13xiz7Pl3zViKaPL0j0Y1EDG831Lz2429UnZovp9RVJpOJnPDJjGzAU00ySvInz2gJCjKrfJ6nxW-TU0g.CfCsdi4Wmmv9d4lOcGbHGg 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":1742975157} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1742975157Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNzA5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZE5sT2NlMmZqeW9Ua3BzNFpIazBHSTU4d0FMbmNuUzUiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXNmwzNmVCUWtWcExuT2YxSmhEdi1nd1VwVVFXdjFROCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTA5NywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiWHFHOFB3TXdBOU1FLTJqb3JNMHdnbWVtYmJLWk5pRjMiLCJleHAiOjE3NDI5NzUxNTcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MDk3LCJjb2RlX2NoYWxsZW5nZSI6ImNSd2VNcTY0SVhibDZrNjNIbkU3T3ZRMjg4VGxCODRTdmdNTDNrMVFLbG8iLCJqdGkiOiJlMTg3MTZiY2NlMzk0ODgwIn0.nX-OOKG-0LOhcArrxLJGMisxGOFLn4U0y_m6sOLLOeMde0wVo5lZU6nH3bHd0xMyety6qAJQ-TlaX_TGcXJeMQ"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNzA5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZE5sT2NlMmZqeW9Ua3BzNFpIazBHSTU4d0FMbmNuUzUiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXNmwzNmVCUWtWcExuT2YxSmhEdi1nd1VwVVFXdjFROCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTA5NywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiWHFHOFB3TXdBOU1FLTJqb3JNMHdnbWVtYmJLWk5pRjMiLCJleHAiOjE3NDI5NzUxNTcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MDk3LCJjb2RlX2NoYWxsZW5nZSI6ImNSd2VNcTY0SVhibDZrNjNIbkU3T3ZRMjg4VGxCODRTdmdNTDNrMVFLbG8iLCJqdGkiOiJlMTg3MTZiY2NlMzk0ODgwIn0.nX-OOKG-0LOhcArrxLJGMisxGOFLn4U0y_m6sOLLOeMde0wVo5lZU6nH3bHd0xMyety6qAJQ-TlaX_TGcXJeMQ"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNzA5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiZE5sT2NlMmZqeW9Ua3BzNFpIazBHSTU4d0FMbmNuUzUiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXNmwzNmVCUWtWcExuT2YxSmhEdi1nd1VwVVFXdjFROCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTA5NywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiWHFHOFB3TXdBOU1FLTJqb3JNMHdnbWVtYmJLWk5pRjMiLCJleHAiOjE3NDI5NzUxNTcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MDk3LCJjb2RlX2NoYWxsZW5nZSI6ImNSd2VNcTY0SVhibDZrNjNIbkU3T3ZRMjg4VGxCODRTdmdNTDNrMVFLbG8iLCJqdGkiOiJlMTg3MTZiY2NlMzk0ODgwIn0.nX-OOKG-0LOhcArrxLJGMisxGOFLn4U0y_m6sOLLOeMde0wVo5lZU6nH3bHd0xMyety6qAJQ-TlaX_TGcXJeMQ 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:
} Body{"organizationName":"Test GKV-SVNOT-VALID","professionOID":"1.2.276.0.76.4.49","idNummer":"X110411675","amr":["mfa","sc","pin"],"iss":"http://localhost:37099","response_type":"code","snc":"dNlOce2fjyoTkps4ZHk0GI58wALncnS5","organizationIK":"109500969","code_challenge_method":"S256","given_name":"Darius Michael Brian Ubbo","token_type":"code","nonce":"W6l36eBQkVpLnOf1JhDv-gwUpUQWv1Q8","client_id":"eRezeptApp","scope":"e-rezept openid","auth_time":1742975097,"redirect_uri":"http://redirect.gematik.de/erezept","state":"XqG8PwMwA9ME-2jorM0wgmembbKZNiF3","exp":1742975157,"family_name":"Bödefeld","iat":1742975097,"code_challenge":"cRweMq64IXbl6k63HnE7OvQ288TlB84SvgML3k1QKlo","jti":"e18716bcce394880"} {
"organizationName" : "Test GKV-SVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110411675",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:37099",
"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" : "dNlOce2fjyoTkps4ZHk0GI58wALncnS5",server-nonce. Wird verwendet um noise hinzuzufügen.
"organizationIK" : "109500969",
"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" : "Darius Michael Brian Ubbo",
"token_type" : "code",
"nonce" : "W6l36eBQkVpLnOf1JhDv-gwUpUQWv1Q8",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" : "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" : 1742975097,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" : "XqG8PwMwA9ME-2jorM0wgmembbKZNiF3",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1742975157,Gültigkeit des Tokens
"family_name" : "Bödefeld",
"iat" : 1742975097,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "cRweMq64IXbl6k63HnE7OvQ288TlB84SvgML3k1QKlo",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "e18716bcce394880"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiaFE4OGh4NUxheF92UmI3T3U1YjZreVA1VzZJc2x1TjhaZ1lCb3BOVHRSZyIsInkiOiJUMFRvaUhFdEJmc0QyY09jTWE2TDZpN0FVcFB4NlBpQy1WbXB5V0J4LVVzIiwiY3J2IjoiQlAtMjU2In19..LwNCqrCu2vHVhC6R.GJeG7KAOjzZAibo35m4qcUdMP9PMrJyoy2xxfSajIEyqPRCwLjSo9qVtuW6Tp48ibF_b9bbs_k_8ieIRD2MG_6DSafF48Aw_7sFPhhAfSpOBeKG08SAX-ESWld5_QWXGn5g_r1mC0Yt0pGd2DQJKr_Ib46xD1Q1uIA.xvVTgBwqFBCDDsncZY-qgQ 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":"hQ88hx5Lax_vRb7Ou5b6kyP5W6IsluN8ZgYBopNTtRg","y":"T0ToiHEtBfsD2cOcMa6L6i7AUpPx6PiC-VmpyWBx-Us","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" : "hQ88hx5Lax_vRb7Ou5b6kyP5W6IsluN8ZgYBopNTtRg",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "T0ToiHEtBfsD2cOcMa6L6i7AUpPx6PiC-VmpyWBx-Us",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"HjI6H2JBvCmE86fY5gA2qnUMakZ8RjXnK7eklhf8GeI","code_verifier":"gVNStIiiWBmb86koD1ppPi8J0OBta90YObfyAyDxMQE"} 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" : "HjI6H2JBvCmE86fY5gA2qnUMakZ8RjXnK7eklhf8GeI",
"code_verifier" : "gVNStIiiWBmb86koD1ppPi8J0OBta90YObfyAyDxMQE"
} 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. |