code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0NTU3MzA3M30..pePMuqmFKKo34lbq.a457yTVVTbUubRWlo6RDWE0r9-wBnanW2kqQ8_vFvCoyzhWOoSJ0XZllLLJA-TYXedMZgKHpk2tyuxuh7JEJGVUxAVNIzbkh5AZVmx0S65Lg51GIKw22N3jJWFme7OeRljjxnAk84Dk9Pu2ngsqvipK7-G3rlJmg3geSRgCFwMe3WuIAqBJH8Oi89LaanF8yhhNzv9cMRzpzoEeMGpukgotqmaexhjFvVcUIXpm7GRo89dYNXsyrpbgR2ZAo1sDsP5J97thDQN_mjWbA99i-_auEd9Q56veYWok2X9I6efIHeLL91kgBLlNqZGl3zbeZf3G341L9yQ8eWs7dNvVQpiRA4b8m-x5yr21iVFbu1nFhjoH9kepndxGaYNpslC8ZcxsoGzBo8JHqH7XD2UqjSAzTOsFs1jzrK-jk-eyrDCynXny5Jf3dFfHmj9M0oRGKdlwNa_sntEotD4iQQX7J1MVCpvLQyChL0ApSq1Oor0u2xpxGQyUjpBJvl6LkZq2UyNX77VMG-N27JAj2crQiEArMKP8gN_os-gb888rCU91VwinpkepOkUTzFW-f5uLZVGU6VPP8i4XUBZYm5Fk7KIEq9YeFIYGH9HY7xKvPHPJNtCUd7SQp5w75VgE8jn46jBKndZstMVsFsadGWkYvg3F6RBJpGRO5l8qNXOmIhbQgZNyf3X31PNz3JqggmqsaIbOWiKiah0juLzPMA893rUdsdmzSq5_29uOC-mpfXkWxP4pTdvA-ukwvEpsZZ3faL36cT8F4OJfCBz1a5nF2zn5UJqYHfXgYpaxuEdKoeceMhj_hzF7ZQ77BTPu2VGjwTH0RDUvD6zhVpxaYGETCgVM6AHx7B3-teiRj_iwphWzONFJMyrdEdxFY9JjcOxnlG_EjRGhQVxAR_nG1-MX1S1CmxOXysZyE_yKKvfmF7n59mar51n31huJmIaYW9olUWq-nE4sMvmpfHprvY5bell0jBd4zfm6n1xjgz2BANKnSUffcrNaIQvL1JH5Vvla7Evr1ATQhM-99VsEfVzambEapVCgy8NMGNmOGz1MzB2_zUeJ83rWDBLgaaIM5vaYXYvg6-R15dBg8RaGlJ4PZ5KSk884PFosD3ZZh9rkMuwOcHOUutu8M2fpfKtmqUtvtY4j_lTiyOq6UK1qQTXz8giepdCNvFMC3CJAS-S9E1Zorb3EJnqal1TCOcu4ytKK-0vucY8iFTXIwBWdzL1dbaUTiXdv_QSKl1ZBUQ60Q6jIfq-bJXfuOnouP1AG2RbiPLn99aItoQBaP0-0iSFgiDwU4mVWtcIyYvWeCcFocv5wjX1zderw_WNf47Y0CV5yO28C9oYffKv2cDQAT3-lFil_H_XfDzi_UfYfWzIePsWNyL-ntggHCXiypHtcTaXmwY3ypPABCgzwDRPZc601gQ0Lb9JsGbd9qiEr2hfi2z9zFNDb8AlLljSr8nXwkhHpA6UF8L6eyAog.rGBKzhmrFA1Lity41x4bWw 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":1745573073} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1745573073Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0Mzc3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoidDc3OHF0X0JYd1FSeTI5UkI5ZTVJS0VrTm1xdVFScDQiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI5RFdzQjhKaXJUd0pRQVFpc1BYU0JIUU95b0htUUtZMiIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAxMywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiY3BKclBTY1JDbFh3b1I0eUt3a3FpX21GWDIwYmdSUE4iLCJleHAiOjE3NDU1NzMwNzMsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDEzLCJjb2RlX2NoYWxsZW5nZSI6IkQzUjZ4dmhucVA0Y2VKeEZjYzdVM0lmR29WZDV4WEJvVzlJRDZxeDUxblUiLCJqdGkiOiI0ZDhmM2ZiMDUyMjUwOTJkIn0.dAl57cgZIzx62VZgZoEAWEBqgzkI_W9R_Gb4CZMxq6MmByY4bm62Mmowtx81E_7P_4dwfPFhAGOo-t1t84VpNw"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0Mzc3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoidDc3OHF0X0JYd1FSeTI5UkI5ZTVJS0VrTm1xdVFScDQiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI5RFdzQjhKaXJUd0pRQVFpc1BYU0JIUU95b0htUUtZMiIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAxMywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiY3BKclBTY1JDbFh3b1I0eUt3a3FpX21GWDIwYmdSUE4iLCJleHAiOjE3NDU1NzMwNzMsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDEzLCJjb2RlX2NoYWxsZW5nZSI6IkQzUjZ4dmhucVA0Y2VKeEZjYzdVM0lmR29WZDV4WEJvVzlJRDZxeDUxblUiLCJqdGkiOiI0ZDhmM2ZiMDUyMjUwOTJkIn0.dAl57cgZIzx62VZgZoEAWEBqgzkI_W9R_Gb4CZMxq6MmByY4bm62Mmowtx81E_7P_4dwfPFhAGOo-t1t84VpNw"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiZ2VtYXRpayBNdXN0ZXJrYXNzZTFHS1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA2NzU5MDMiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0Mzc3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoidDc3OHF0X0JYd1FSeTI5UkI5ZTVJS0VrTm1xdVFScDQiLCJvcmdhbml6YXRpb25JSyI6Ijk5OTU2Nzg5MCIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRnJhbnogRGFuaWVsIEp1bGlhbiIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiI5RFdzQjhKaXJUd0pRQVFpc1BYU0JIUU95b0htUUtZMiIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0NTU3MzAxMywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiY3BKclBTY1JDbFh3b1I0eUt3a3FpX21GWDIwYmdSUE4iLCJleHAiOjE3NDU1NzMwNzMsImZhbWlseV9uYW1lIjoiSMO8bGxtYW5uIiwiaWF0IjoxNzQ1NTczMDEzLCJjb2RlX2NoYWxsZW5nZSI6IkQzUjZ4dmhucVA0Y2VKeEZjYzdVM0lmR29WZDV4WEJvVzlJRDZxeDUxblUiLCJqdGkiOiI0ZDhmM2ZiMDUyMjUwOTJkIn0.dAl57cgZIzx62VZgZoEAWEBqgzkI_W9R_Gb4CZMxq6MmByY4bm62Mmowtx81E_7P_4dwfPFhAGOo-t1t84VpNw 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:43771","response_type":"code","snc":"t778qt_BXwQRy29RB9e5IKEkNmquQRp4","organizationIK":"999567890","code_challenge_method":"S256","given_name":"Franz Daniel Julian","token_type":"code","nonce":"9DWsB8JirTwJQAQisPXSBHQOyoHmQKY2","client_id":"eRezeptApp","scope":"e-rezept openid","auth_time":1745573013,"redirect_uri":"http://redirect.gematik.de/erezept","state":"cpJrPScRClXwoR4yKwkqi_mFX20bgRPN","exp":1745573073,"family_name":"Hüllmann","iat":1745573013,"code_challenge":"D3R6xvhnqP4ceJxFcc7U3IfGoVd5xXBoW9ID6qx51nU","jti":"4d8f3fb05225092d"} {
"organizationName" : "gematik Musterkasse1GKVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110675903",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:43771",
"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" : "t778qt_BXwQRy29RB9e5IKEkNmquQRp4",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" : "9DWsB8JirTwJQAQisPXSBHQOyoHmQKY2",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" : 1745573013,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" : "cpJrPScRClXwoR4yKwkqi_mFX20bgRPN",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1745573073,Gültigkeit des Tokens
"family_name" : "Hüllmann",
"iat" : 1745573013,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "D3R6xvhnqP4ceJxFcc7U3IfGoVd5xXBoW9ID6qx51nU",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "4d8f3fb05225092d"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiUnhXcVRUX0N3RUZQb0REV1dSWnpuWnM2cW9INGhubUxaamw3c3g4TjNIdyIsInkiOiJQamdTTVlxNk5mQjdqTks5RVRWTkVINWItRnV4MTMyVWtpQ05TQ0ZKM0ZjIiwiY3J2IjoiQlAtMjU2In19..CumPuMM_0qTactXe.L-vSxbpZbY0lSNniYYs8Z7UulU-e_8KMvFVEl3HSUFqyaRF-0yk6mSNrAetWdgRfxfFXeivaEpcA1v2iMmDLdbYLr7hv7IDgfSLIFXldZFm2rhun3vMB5TZ-6U88WMqrJsZy7fg1-AbmuowJ28UiAXxw_Fx1Qatl5w.Mr5YAxqruMRZQE9g74q6Lw 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":"RxWqTT_CwEFPoDDWWRZznZs6qoH4hnmLZjl7sx8N3Hw","y":"PjgSMYq6NfB7jNK9ETVNEH5b-Fux132UkiCNSCFJ3Fc","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" : "RxWqTT_CwEFPoDDWWRZznZs6qoH4hnmLZjl7sx8N3Hw",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "PjgSMYq6NfB7jNK9ETVNEH5b-Fux132UkiCNSCFJ3Fc",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"CpUY5DuI6uZkDYGgmYL3eO3C2-MeLCYLOOfEj6b5HCo","code_verifier":"rn2ZNGGlbVlTZxwSGJqg2uccm2JuVGYIEJvnRLPn0fE"} 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" : "CpUY5DuI6uZkDYGgmYL3eO3C2-MeLCYLOOfEj6b5HCo",
"code_verifier" : "rn2ZNGGlbVlTZxwSGJqg2uccm2JuVGYIEJvnRLPn0fE"
} 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. |