code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NTU3MzA2Mn0.._kUN7LPE6xndHpR5.bgjpqKVXf9RD41AAgAJJfNZ74f6jj5E5FkDMUQmCL94dnqIAWli-VFgHKaehqN6pYEpjAKiwhHEy5jDHl2ebW8elUY3Fv4PxTd8kLiUetQWRjumcUdI_2_2He1lg1F0444ryPhrZC0Bv4x34Hg8d3rjMd7rAXjcc75GG7ciXTXOppHCgGrAJsFZpTlvPXE7baBDmNUHevu8mbhQO2g2V_beyXxFP4r-KdcOWgIe0emgo8cE8WX-34CdwOMjjQA-DZfrVB8nDiNQmqMFSa1criArYJYbNEsHXHtAcVWD3wwu3FhCO24WT6NM_1DMNQkfs4NIouycEFslw8tNR8OMIGoth6NYB3uHEC1SqCTBhmdQRA5JnAsGsVFIqzqah0T-5s-a497U1DTF_elWaFqyXhLOe6csgaz5Lgoa_iDWilItueZkfKMjfel9i_h7zs-to2pcqR5DNnHJoB0bXOWOJW5YCvKE-9MTFrxlCQLWzPkTl2UpexZ00XLAlVn4_FyxouQ2i1DTEWa2urMO-76QCxjYzczWX2gCBY1zbIVhnUNXFh30Fk5mWpdx570CZ0nQISe7Irn7YpayQ1d7B9HZXJwxwX0R-EIrkt-I54VxHZIfiysoxSfLoLOUsvwfLuTNbqSZoh8zGdzMwSMqp_kTNJl6zhS4Ic6hMS1A2hfDAlOb9KDkPM0GtCzPDZ9QNXBRMX3eN5gM1SloZUhae-ivxBTz1QVtR3dSFVhJjGdePFFyGtJS8xG1xxjLtsSELXnblZNIGsJvifD3yxt3FKBLhd6B0g31KNZhDqhiiifGezbWw4MBcLti-MR6UCbyZnAxghP8tQYysq4WMn6gVlL2lE79CpUNmzRtlfWCcwhcKQQg8N8vseSmdwhqmPuLhKR2bI_wUxtn_JjEqljSRuZMAuSMtrGyOL7RodfibU__hDvl9HIijYR-j8WlgwelEMOzyzo5uZq9jlhBS9eLVFVcaagGmHLwbtoaCWrSXcEq3hWYN4tNbrxponue-2lDvICueDJHsyF0u2M020SW9prTO5u1fBl23uTGZh03em383KqAZh4wSYGVX4iOxA0CigPWFOMjcwGG91mG78z2Y5cwrP0NJt1o7E6nK_HG-F04Vjr5LxCEiTAUxo_B6_bcrGgYtfK3srUPbI05tgQw-46CnPySUad3zFeljuIz6sENEUhxPK2P7sSBWGyWqKFlz855kFp6go7T2Y-mHZieOphZjP-4qTHaHt_9g7HkB252wzo_beyMYrCL6htnBegoS-f_tBGFUdWtMUhIvgG7T8S9kMjfcYoORJM9V08sGJU_66ZEWfiWkZamsqpI4-p2Cs0WzPm19NsvLGbUSkFI28TmuyambGJzGR5kb42oFlyAl88DB-La1HyAr2Un4oHNi_8nEMEePpMoY72C5s-JPxLCQv8w2n_A7W-e61hoV_drf9hGm-HeeqIB62EjRWU9x9QFfSJ5G02vyJ1g.ctcfdApXNzBJySuJJJuFNA 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":1745573062} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1745573062Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozOTM3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT1l5eVpsWDBneW5KdER0a3NENWFfdXlwLTRST09LajYiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI3cms1Tk12VnVWVGhBeXVkSDFMaFNWUEpFNmlXdXZQcCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAwMiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiUnBQajVtWmxMbGNaLXVRc3hfT09paDVCZ0NYZHFyWXAiLCJleHAiOjE3NDU1NzMwNjIsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDAyLCJjb2RlX2NoYWxsZW5nZSI6IlNMVndwRDZXNnZYNHRjTThIT1FOb3V4OEY2dENNWmJuaFN0aERMcTdlaWciLCJqdGkiOiIxNTAwNGVjODYyN2VkZmZlIn0.NYIxSoV_6Ph69L9zG240dR-8css8mIK9JqeAE0zcjyGgW5aEUBMAK8JgB8pVi2lWGqnexK8x_zy_Lpjp9rpU1Q"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozOTM3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT1l5eVpsWDBneW5KdER0a3NENWFfdXlwLTRST09LajYiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI3cms1Tk12VnVWVGhBeXVkSDFMaFNWUEpFNmlXdXZQcCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAwMiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiUnBQajVtWmxMbGNaLXVRc3hfT09paDVCZ0NYZHFyWXAiLCJleHAiOjE3NDU1NzMwNjIsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDAyLCJjb2RlX2NoYWxsZW5nZSI6IlNMVndwRDZXNnZYNHRjTThIT1FOb3V4OEY2dENNWmJuaFN0aERMcTdlaWciLCJqdGkiOiIxNTAwNGVjODYyN2VkZmZlIn0.NYIxSoV_6Ph69L9zG240dR-8css8mIK9JqeAE0zcjyGgW5aEUBMAK8JgB8pVi2lWGqnexK8x_zy_Lpjp9rpU1Q"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozOTM3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiT1l5eVpsWDBneW5KdER0a3NENWFfdXlwLTRST09LajYiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI3cms1Tk12VnVWVGhBeXVkSDFMaFNWUEpFNmlXdXZQcCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAwMiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiUnBQajVtWmxMbGNaLXVRc3hfT09paDVCZ0NYZHFyWXAiLCJleHAiOjE3NDU1NzMwNjIsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDAyLCJjb2RlX2NoYWxsZW5nZSI6IlNMVndwRDZXNnZYNHRjTThIT1FOb3V4OEY2dENNWmJuaFN0aERMcTdlaWciLCJqdGkiOiIxNTAwNGVjODYyN2VkZmZlIn0.NYIxSoV_6Ph69L9zG240dR-8css8mIK9JqeAE0zcjyGgW5aEUBMAK8JgB8pVi2lWGqnexK8x_zy_Lpjp9rpU1Q 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:39371","response_type":"code","snc":"OYyyZlX0gynJtDtksD5a_uyp-4ROOKj6","organizationIK":"999567890","code_challenge_method":"S256","given_name":"Franz Daniel Julian","token_type":"code","nonce":"7rk5NMvVuVThAyudH1LhSVPJE6iWuvPp","client_id":"eRezeptApp","scope":"e-rezept openid","auth_time":1745573002,"redirect_uri":"http://redirect.gematik.de/erezept","state":"RpPj5mZlLlcZ-uQsx_OOih5BgCXdqrYp","exp":1745573062,"family_name":"Hüllmann","iat":1745573002,"code_challenge":"SLVwpD6W6vX4tcM8HOQNoux8F6tCMZbnhSthDLq7eig","jti":"15004ec8627edffe"} {
"organizationName" : "gematik Musterkasse1GKVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110675903",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:39371",
"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" : "OYyyZlX0gynJtDtksD5a_uyp-4ROOKj6",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" : "7rk5NMvVuVThAyudH1LhSVPJE6iWuvPp",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" : 1745573002,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" : "RpPj5mZlLlcZ-uQsx_OOih5BgCXdqrYp",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1745573062,Gültigkeit des Tokens
"family_name" : "Hüllmann",
"iat" : 1745573002,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "SLVwpD6W6vX4tcM8HOQNoux8F6tCMZbnhSthDLq7eig",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "15004ec8627edffe"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiS0hoRG9JRVJDSW1fTVdkallSMDNXVWZWekp1ZW1LQklYdGUzeWYyTTUtWSIsInkiOiJUcFZXWjhad01DSlI3WjBORzE1NkVUb0kzajZEN19wT1hkR05vTzhBUXhNIiwiY3J2IjoiQlAtMjU2In19..c-1NKcTv_OaO-JsB.qgTAh2SRVUs_kehPI4ljjG6szJp6y3FuPVSI6Ij9w4z4zvpHcJ4mq1gj6jBAPqxkPnJe9hJYi2k5-SWUWii9-Mu_Uh9-ILlsb3Rxr422sBfaNJtFSIoU3Ysa2CI-iwc3-k1i2zLUflGMeIxhci4nEGCgvh_UcQKIMA.A-2k_dfW3YG67_vwbAzX5w 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":"KHhDoIERCIm_MWdjYR03WUfVzJuemKBIXte3yf2M5-Y","y":"TpVWZ8ZwMCJR7Z0NG156EToI3j6D7_pOXdGNoO8AQxM","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" : "KHhDoIERCIm_MWdjYR03WUfVzJuemKBIXte3yf2M5-Y",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "TpVWZ8ZwMCJR7Z0NG156EToI3j6D7_pOXdGNoO8AQxM",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"r9FobasGMFY1OVjk68tQCdXNHY-rAmhknrFE2ETY4KA","code_verifier":"GzwDaG7ycsOnZP_T6FgKc0pqgE03ZRRF-rTb7EJ-VLI"} 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" : "r9FobasGMFY1OVjk68tQCdXNHY-rAmhknrFE2ETY4KA",
"code_verifier" : "GzwDaG7ycsOnZP_T6FgKc0pqgE03ZRRF-rTb7EJ-VLI"
} 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. |