code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NDcxOTk1NH0..ykCB5AnwHwN9WwBF.VPCsPNXAoAWIKOSWsVvG5RZw1KrDI9FuMWE8DFUTOt60ljkyj-W-4NhogygfV76FFnkDyKSHX_QzrJU_SLIUYGHZ4bQxQ4BI_DkHcNsPjMX7JYpk3-w3PjMsQZJQU4srbTQNazdXCTJ7blFcdH9BovKr3r2AAGv2IIWOVmnlpPxdNkWh8C-JiGbqJMoNGsNP7q51Oq-8nSxEYxNwddRPN1kt2E1W6rxf6MCXPkH2xlqhkVoqMvXzMsiuFdwQu5SikXU3FE02AKODK59O2SkZpPIN-cp0AVx-R9Jp8UGCl0Rf9cmfhRSeKgvSD087el158WVvh2rrLII_-CD9ct6eVFNsS2_U8g2XiMopLQeuEFGkLL8Hx0qPXeQ_buritAK1g4vX8m8RF6TnmPqqhq24xfJ-O3RfN3BjIjm8M7dBzbWUyKXXPjU4d1TJ0rEpIRXIqSH3fUOdY22qV7Krqv3lMgzSEoyl9E5_HPpGrZftoHWGS7t0iGQLH4aDiQ1Ew6ZF6YEZKNwHM3l5Oq1LtiWy9jvkPcj9V04tK24Ssb1mjr8IRXjUYdlLwilMVaB4_fzTw7xudjcyg0ACqIa4Gya-r9peYBpuIrN4P5--suQYMIGgF55gfce45csl-uXp9cHQcesgUqDpShQruSKaIidP4MaCXl09ntT-FrAiEBTltIjlZJRFs5fK0T6Ny6WuRXTLYfne8-MVfc6-IdbuccziwN8qo5T5JUrgWECu6lh_yCsLQ-Yh6BuW5BUCzDTCb64o85nfsLIjNOOlBCjEiOgkro3HWRXtsBYkEviAnhNHgTxLF61lDbfWbQKOhaaiHiTXTJnW4sdcWszrBNArZ-bDHgGbkwsYhwlPhi08VphqONGP9qRx6H4mwxiLACtcCfeOsYnSRK_YVEBRmcE6j7F1EI1eDKtBKQzzJw8exdGnAiIjd9-gdRsDlQWtBLsUhUYPSvwU2REQU7MCLtkd0Nll-tYwJUXxfmC2v_wJOX-n2XNj_ZurU6N5UCmkkyE1n53tbNWdMoGUW6cyLfonNn4TirsqBSxgo4-nE6eApTQuPDq_DJDztOV3w6ClEeQg1SP3iP50XanNIXEigdkoqr4sMocuPb_kdMHtYM2WXj2ek1gU99eNE5LJn_oUkAv5HO9XT751XAronUQn58fMXY0eu4S-ok1qw7l-OJpLvRKvEO9ikXwS_c9p-PZULMsMQb6p3oDR-MfGMzlCs8Pohb_pgt6BmtGaL20-6E3j15BVkqCHSbh0V8qwBlzzK2mSziAHIpqXm4-5uAkivvc9K2mYWHwbxgpfM1Ofgqwnf-maMZ3eTSvVejzexloGXvAhbR4GqNcoT1aqPZENF470mRq908L-EwySfGQass6hW2CR6NS9aA9WKfoSTpiJ1dkphNdDifby6APrz8_Z8FQiRHdC1mqAy7J883mdCVPj_oUtXkFk7gvzFYj9U6xTcTqSwAgmTgU_IX2rFDw.t3boSGiBu44qRE9ZNmk7DQ 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":1744719954} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1744719954Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MTExMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoielp2aTFSY1lJM2ZZcXU4T0ZtdGw4SnJwV0lFSFU2c18iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXUDRYYWNsaUhyaVcwNE9GYUNCaE1YTktROHFGUjlyZSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NDcxOTg5NCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoianV3WnV1UDNPN3VfRExoNU45cDQ4MGM3d1l0eFhwcUsiLCJleHAiOjE3NDQ3MTk5NTQsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ0NzE5ODk0LCJjb2RlX2NoYWxsZW5nZSI6InlnNTlTSjJKc095dTQ3d0lDMXpoZmtJUTBuQlVzNFpkNHNPMENrTGFLVUEiLCJqdGkiOiJmYTFmODVhZDUxZjJmYTY3In0.Wm-LHoSN_ECSManTOI-NyiHgtjWq16lO9KBVXlGQWWWh9dLrwnw9fG9TF7zCR-3sVk0rKSuE1gSmGzYJY2xz6Q"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MTExMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoielp2aTFSY1lJM2ZZcXU4T0ZtdGw4SnJwV0lFSFU2c18iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXUDRYYWNsaUhyaVcwNE9GYUNCaE1YTktROHFGUjlyZSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NDcxOTg5NCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoianV3WnV1UDNPN3VfRExoNU45cDQ4MGM3d1l0eFhwcUsiLCJleHAiOjE3NDQ3MTk5NTQsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ0NzE5ODk0LCJjb2RlX2NoYWxsZW5nZSI6InlnNTlTSjJKc095dTQ3d0lDMXpoZmtJUTBuQlVzNFpkNHNPMENrTGFLVUEiLCJqdGkiOiJmYTFmODVhZDUxZjJmYTY3In0.Wm-LHoSN_ECSManTOI-NyiHgtjWq16lO9KBVXlGQWWWh9dLrwnw9fG9TF7zCR-3sVk0rKSuE1gSmGzYJY2xz6Q"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MTExMSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoielp2aTFSY1lJM2ZZcXU4T0ZtdGw4SnJwV0lFSFU2c18iLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJXUDRYYWNsaUhyaVcwNE9GYUNCaE1YTktROHFGUjlyZSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTc0NDcxOTg5NCwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoianV3WnV1UDNPN3VfRExoNU45cDQ4MGM3d1l0eFhwcUsiLCJleHAiOjE3NDQ3MTk5NTQsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ0NzE5ODk0LCJjb2RlX2NoYWxsZW5nZSI6InlnNTlTSjJKc095dTQ3d0lDMXpoZmtJUTBuQlVzNFpkNHNPMENrTGFLVUEiLCJqdGkiOiJmYTFmODVhZDUxZjJmYTY3In0.Wm-LHoSN_ECSManTOI-NyiHgtjWq16lO9KBVXlGQWWWh9dLrwnw9fG9TF7zCR-3sVk0rKSuE1gSmGzYJY2xz6Q 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:41111","response_type":"code","snc":"zZvi1RcYI3fYqu8OFmtl8JrpWIEHU6s_","organizationIK":"999567890","code_challenge_method":"S256","given_name":"Franz Daniel Julian","token_type":"code","nonce":"WP4XacliHriW04OFaCBhMXNKQ8qFR9re","client_id":"eRezeptApp","scope":"openid e-rezept","auth_time":1744719894,"redirect_uri":"http://redirect.gematik.de/erezept","state":"juwZuuP3O7u_DLh5N9p480c7wYtxXpqK","exp":1744719954,"family_name":"Hüllmann","iat":1744719894,"code_challenge":"yg59SJ2JsOyu47wIC1zhfkIQ0nBUs4Zd4sO0CkLaKUA","jti":"fa1f85ad51f2fa67"} {
"organizationName" : "gematik Musterkasse1GKVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110675903",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:41111",
"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" : "zZvi1RcYI3fYqu8OFmtl8JrpWIEHU6s_",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" : "WP4XacliHriW04OFaCBhMXNKQ8qFR9re",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" : 1744719894,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" : "juwZuuP3O7u_DLh5N9p480c7wYtxXpqK",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1744719954,Gültigkeit des Tokens
"family_name" : "Hüllmann",
"iat" : 1744719894,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "yg59SJ2JsOyu47wIC1zhfkIQ0nBUs4Zd4sO0CkLaKUA",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "fa1f85ad51f2fa67"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiUU9LMWFyM0ZyUnQxMlp4LWhVVklZVi1ENEd1UEdVak90YzVwT2J5T2pRayIsInkiOiJaLTNUbzNlSVgyeFJIcGFSN0dUSWt6MlF0SmFBemhpajJ1RTFFMlBJZE44IiwiY3J2IjoiQlAtMjU2In19..bGHxEkJYxiSIowzo.dU3CXB_1DjKozE-blFah6VyFi3jivX4N7XY_BJ7mtQ1NEEukylXH8-ZLMc9IkR_QshA6MILkLpNX6MduO3zYss6Gr0RniMzixFKchcsAxRwbIOGhkwk7pFPf-7GZlbuBLywlK5t8sD2ZeJk2dyKwKQpEinFGG3qnUw._JCpCYss0Hqhr3z7r5HbLg 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":"QOK1ar3FrRt12Zx-hUVIYV-D4GuPGUjOtc5pObyOjQk","y":"Z-3To3eIX2xRHpaR7GTIkz2QtJaAzhij2uE1E2PIdN8","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" : "QOK1ar3FrRt12Zx-hUVIYV-D4GuPGUjOtc5pObyOjQk",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "Z-3To3eIX2xRHpaR7GTIkz2QtJaAzhij2uE1E2PIdN8",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"LXxq85PZofX9f4OUxMYVAAMy7Qs102Gis4RJL7a7z64","code_verifier":"KV3TF5jyJeMJ1QS896EtfKm9IDH-x5iaQbV4VPfu6pY"} 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" : "LXxq85PZofX9f4OUxMYVAAMy7Qs102Gis4RJL7a7z64",
"code_verifier" : "KV3TF5jyJeMJ1QS896EtfKm9IDH-x5iaQbV4VPfu6pY"
} 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. |