code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NzEzNzQ1OH0..nDc1U_Ful4xUf0Lh.2MCdPzknt2ytgRcohBdsfmnUQ4VyGjd8ueYGiB-bSJpO49Wm1LJQR5NTq4vskwUlSfCGUhgRYSs8dlTQZfz5LRU4EcKOdBs73l9hw8X6CFD_i8lCPOqYlZY-TPmLgbCKg4wTVYy_ZHM2aVFPcUWm1iJzXg32U04SoKq0QE-_XQj5qF5a2XessZccyG5HAUO-cSPMMOf8XH_qOR3_rqcnVFKNlMWkhfyBsrQO7hKr71x5uTs_sZmrgztUs1-6N1Ho6AqPG9LXEkHjTDZRi3AmSG2Xz0KOAXnQKYEGUoB2mTT_S1p8-xm7iLVNbZaK1j05q0vJGTmCnNgOkYDzgxX75WLjFzTCTVT07JQu9Asgj2u1WL7EkhBUZ1vFWK2yTaxr0LHSk0BuL2HIDI774jO_ok0SDogsbpSBO9oEhofpPs7Anx2_aH7SYV3vHMO6CAvUW1fdm9_OBsPuplxrJO9mib1gK6ug1f2ZTMDvwf4qyxC2rzOFGPddwqC1BJ9kFcvdAd7n3ekfwUFDGIMC3ye47DUizZkDSuYf2RyWxTXmUQo5gc4flyYfGHnGS2Y2ml0_K64fAXiZWueWjaQHDvtuazIYktQP6h1MLO_8AwtpKavZdlAnX7OEeegTx6HZddiqPMb8jCt2yLyAKAbJwFtCgxajMSN6YWnVfdxFKaFMZxDFbTZQPvCpnIj-ov83x_JBgXXCF5dj-jDewHsPqkKmnQR3JeR0n4JaNfoe5V3D4kIMyKoMRt9x4wir40RzzFt64qqL2rTcKqlc9aCLFtPi2eZGfIdRdIW6HKY_w852bAplW_l29pE6nNG_Z6Eb7weWuJFHGfyp616woTuqmHakVQsGwL598Y373EUJvtklbx5xyVnqIM4eEIRldUoRTI2iFx0P9l1CKnaAtzY3bCpZsQPilVMVJMdfGRrZ2q3gWvGCr18f5suxD4QhC7pgbaSnjP92IXbMBVTQ9n4qovD3CeFQVbfvh97UJRzoxQNK7f5jwJKAMg1uwNJJAgaIrzEggrkcwHAosJ8eSXj1uP4FJi2glhFaUVT9ZDKZDNJJb_NgXEhzrSSdE-7IfPo8zwkQqt4ZrC0QAUY9_8-K-ebQoGEEViy9QpXXerbBQjTA4ZLM16mRe9_eaHu6KmF8F9KVEcpHX-27uOr2lzumQCeelolgArgSAyYgfcpHq4GEZ0zSeeCiFecxia6nLktphoHx_Z2GcAs6Yc5izHHto3m447WrUgRGfQhokE0npL6hVvGTpa_f4HCUbrSC7wQ0cpdDrjCCaa3zxiUj2U-cQomFAdxqa8zAzRnTlOFeV8pruBrnwyGxZIs_fx34j3SjsyS20oopSTjOcSyFCdfDzPOBWUZ6UA4ytzMZtCoyW3TfnUCjrKOzKAyiG0cx7P0OJyTvxG_P_kiU6IKvheVsLRPMXMunL82BQr8UV1o5yojYExHaYtenuPVE9dulXDL9wsi88-_x_1-Wj0A.QnqUlDTsTkTGi0kv-bsr4w 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":1747137458} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1747137458Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzgwMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTkNKajB5V1ZzQVZzdWJ3WW5wY045Mk9KTnpFOGNaaE8iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJ3QndzWXRtSm1zanhsR202TkYwSkkxOVdPR1lxb0Z5SyIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NzEzNzM5OCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiSDEwQWhDMU53enFjNG4tQ0EySHd0SDhTRWd2b1Q0MWoiLCJleHAiOjE3NDcxMzc0NTgsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ3MTM3Mzk4LCJjb2RlX2NoYWxsZW5nZSI6ImxSa2lfWkFMR2hUaGE5a0lNd0gwNG9kbFNxMW1qOGprOTV3bU1tSFp0MG8iLCJqdGkiOiIwNTFmNGU4MjZkOGZiMDZkIn0.UQ-efLNyg1rZx59A-0WIxR0qC5M_zmhl6FWWTWiLHviEXxsv-Xcyw-f7s79l773yAm0kdPp9FZW9QzUGlb3eZw"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzgwMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTkNKajB5V1ZzQVZzdWJ3WW5wY045Mk9KTnpFOGNaaE8iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJ3QndzWXRtSm1zanhsR202TkYwSkkxOVdPR1lxb0Z5SyIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NzEzNzM5OCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiSDEwQWhDMU53enFjNG4tQ0EySHd0SDhTRWd2b1Q0MWoiLCJleHAiOjE3NDcxMzc0NTgsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ3MTM3Mzk4LCJjb2RlX2NoYWxsZW5nZSI6ImxSa2lfWkFMR2hUaGE5a0lNd0gwNG9kbFNxMW1qOGprOTV3bU1tSFp0MG8iLCJqdGkiOiIwNTFmNGU4MjZkOGZiMDZkIn0.UQ-efLNyg1rZx59A-0WIxR0qC5M_zmhl6FWWTWiLHviEXxsv-Xcyw-f7s79l773yAm0kdPp9FZW9QzUGlb3eZw"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzgwMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTkNKajB5V1ZzQVZzdWJ3WW5wY045Mk9KTnpFOGNaaE8iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJ3QndzWXRtSm1zanhsR202TkYwSkkxOVdPR1lxb0Z5SyIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NzEzNzM5OCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiSDEwQWhDMU53enFjNG4tQ0EySHd0SDhTRWd2b1Q0MWoiLCJleHAiOjE3NDcxMzc0NTgsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ3MTM3Mzk4LCJjb2RlX2NoYWxsZW5nZSI6ImxSa2lfWkFMR2hUaGE5a0lNd0gwNG9kbFNxMW1qOGprOTV3bU1tSFp0MG8iLCJqdGkiOiIwNTFmNGU4MjZkOGZiMDZkIn0.UQ-efLNyg1rZx59A-0WIxR0qC5M_zmhl6FWWTWiLHviEXxsv-Xcyw-f7s79l773yAm0kdPp9FZW9QzUGlb3eZw 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:43801","response_type":"code","snc":"NCJj0yWVsAVsubwYnpcN92OJNzE8cZhO","organizationIK":"999567890","code_challenge_method":"S256","given_name":"Franz Daniel Julian","token_type":"code","nonce":"wBwsYtmJmsjxlGm6NF0JI19WOGYqoFyK","client_id":"eRezeptApp","scope":"openid e-rezept","auth_time":1747137398,"redirect_uri":"http://redirect.gematik.de/erezept","state":"H10AhC1Nwzqc4n-CA2HwtH8SEgvoT41j","exp":1747137458,"family_name":"Hüllmann","iat":1747137398,"code_challenge":"lRki_ZALGhTha9kIMwH04odlSq1mj8jk95wmMmHZt0o","jti":"051f4e826d8fb06d"} {
"organizationName" : "gematik Musterkasse1GKVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110675903",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:43801",
"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" : "NCJj0yWVsAVsubwYnpcN92OJNzE8cZhO",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" : "wBwsYtmJmsjxlGm6NF0JI19WOGYqoFyK",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" : 1747137398,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" : "H10AhC1Nwzqc4n-CA2HwtH8SEgvoT41j",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1747137458,Gültigkeit des Tokens
"family_name" : "Hüllmann",
"iat" : 1747137398,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "lRki_ZALGhTha9kIMwH04odlSq1mj8jk95wmMmHZt0o",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "051f4e826d8fb06d"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiQ3R5b0xPcEl1eVpjb2V3V1U2cVdjemxwVmJfR0NkVFBKV0E3LU5Jb29PayIsInkiOiJGWlhPZ1pVdHA4NDJEUFpUakI4WVktWjhkU1E2Z2c5Wk1qUU5YdnBjM1BRIiwiY3J2IjoiQlAtMjU2In19..Amr4zAgups9WNYZ2.YJXToiWglhMYJeiToQ6iQ-M4MnFmHBpYKRIpufZu3fBulpOgndYBE38x_sl90bGylr4ZsXh8F1t36dNMlHT0oAke2yQJVGn-mbi0rE5_vTpUnMBM8dymHaCrOlVnVHiwjWaKdJIOJL38gZG0RKvD77ZyTMB5bENOtA.e1TVUEFIzPFJVzpYrbRKqQ 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":"CtyoLOpIuyZcoewWU6qWczlpVb_GCdTPJWA7-NIooOk","y":"FZXOgZUtp842DPZTjB8YY-Z8dSQ6gg9ZMjQNXvpc3PQ","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" : "CtyoLOpIuyZcoewWU6qWczlpVb_GCdTPJWA7-NIooOk",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "FZXOgZUtp842DPZTjB8YY-Z8dSQ6gg9ZMjQNXvpc3PQ",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"4T6V3zGQDC45E_4arw33MUP8QMV8I_RtOokzGtxqy14","code_verifier":"KNrXdF858sYWsvHK1ts3y2rGk7Y9RX975uU9QIyBhAU"} 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" : "4T6V3zGQDC45E_4arw33MUP8QMV8I_RtOokzGtxqy14",
"code_verifier" : "KNrXdF858sYWsvHK1ts3y2rGk7Y9RX975uU9QIyBhAU"
} 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. |