code | JWEeyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTc0Mjk3NTE2NX0..QwJ8WR5pwLCzaVZw.p3jyZMATJ5_NJ8e69LAgzeG_g3jb3BQpxTbS5hRFLcxX9QNon7I2YQVLzv506zLpQ9dxdk_RHPFZF-fmXYBUTpJXo54RmPR5hLjTH2svEDOhEKdhnsLxd9TNYHvWqby99vzGHSdcKuet4vyHzCkahGUwb-y4_DBD9O6my5y8sjGhRlBaZh4lwURzsWyA6vOaoj6unWYGRu0D93OrrjbPdLdTr6euOiIzZ7G0jUHah82voLYkaZzrOtzcCWxUDIRdtOxOUKHoCADeEOTmKrlwReSzpeXNfkcX1LQ7KACwWt2XWrLYKAkzVpVpkpmmmO7dgcBd9JSqoUbiVo1dc12kYB10aIsyP9tImHvwYwdIINnCYOp1umKsia3UAWiNQ7p1sUeHY4cDNPVaF7lwwKThupiaca79yri2OKhtP-wLyRmnFtOetimqJPxqeKmanBFIpde6xG1jTi8lSK-33nC3j8RW9k_XmJ0UxHJQNb_4CB9ztvZTHGU9AXSKmMOZDMaUcD4auea0Vjspom1WkUtpkcB6ZuoyQJMKibEQ8ykElXbkmNF1y30g4noJ4vNdH26MBEYbuZIJYa3UDARvvJT08xwI_-8mH7iuCUxQ00Lx4X57_BSC5ECyw3m3qBS92Azg06b3kcwENgrM-Y8zSirOMgAzMuizo4dFomtfPe1xBBtxMfsvQ6gy_JVQDj0nKeH0XTjHbvX6cI0fxk_eE9SxDHDs3XmOxao-SU9Jl4JAGo5WGjBRRLdxDxgKZIbixO-zNSPw6s9-6EaIbhCe56fA9tG7vjnF7EbrJylkoj57uAcEJnifVzpZFPiSbU3BLpDuNsfdd7fN_lD8c24-ZEc1yHDnFNKbTj3ocROVN2wgUY6t3jZ_fIZ3Y3et1kATh9Jo6OT6uDxO_CCu7Nox_HBnlDfQoQCOBTRn9xIwknDDxEikw086HNC4t_3_amjFAmZXXDNArJ-jFgFNvySVkSKZA-RyNh3aMfqKjoVtttGWg69GI8f_1UoUBs4Lx13UsW1KFDP4VSdfXxsfhpIzr3EmFmylE6HbjvD7IpROi7JhLI0kR-tpCLuIeommeHXNHk-FKX7sUDbBgM_p-7UJZycvgT4oLb52wCKF3NYDeBCkHouab5SGalxSqHAuvEJLe7eIFkHRSqG-a8T8FT0Hm6lmq2TrmzLlyBnxxIeASTQrca9o5wOM3VNMU9cu_ahQzvQHJtrdmc_z-xkMGNquaiqkaTqBG_qUnC0tGCvz-5itxvnhDZZ36m4svojLSsHojn7MgN-NmPylpOgoGnBlzwjao0--kQHe9Cfsg3G6AMBOeLlGAYfFu5ZPN6RwOkZve2C0s1G0exVm5ubxaCc4ZjLQmzJeqtKvNMYRNEfwWcIClm8_ujdM-98VnEgDfQa68F2NFF8va6hoG8s5cRCqdh8a_5CZmwdELB2f3RSWBzedBzrDHq6yB6_EUhduFpZ9dmhd.821lyLQFbbUhTlY-2Q55_A 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":1742975165} {
"alg" : "dir",
"enc" : "A256GCM",
"cty" : "NJWT",
"exp" : 1742975165Gültigkeit des Tokens
} Body{"njwt":"eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzQ5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTWcxU2psMjBYa3B5UWcwZk13Qlh0eVhEc3VsdW1POTkiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJSZHoxTHVwbC1ROHplZXlvbzRDR0FVWl9qcHcxQ0p2RSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTEwNSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiYW1WQU04aEJJX0htYm02LXB1YU1oXzRPWE9SMEFFVjciLCJleHAiOjE3NDI5NzUxNjUsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MTA1LCJjb2RlX2NoYWxsZW5nZSI6InlUeUoyUkhyOERvMmhQSWE3UERidUdkMTB4S2o5TmJRaFBLM1Z0WkRGUE0iLCJqdGkiOiIwZDAxZWE5MGVkYWM2NzUxIn0.SOrK2gq0SDobHI3Jlno2iwUhaF9Uzrhgl9Y1F1aZISFVcLv3biPqVzKkPI3BNpRMMTXGZhCnLK165Bt8NeypGg"} {
"njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzQ5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTWcxU2psMjBYa3B5UWcwZk13Qlh0eVhEc3VsdW1POTkiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJSZHoxTHVwbC1ROHplZXlvbzRDR0FVWl9qcHcxQ0p2RSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTEwNSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiYW1WQU04aEJJX0htYm02LXB1YU1oXzRPWE9SMEFFVjciLCJleHAiOjE3NDI5NzUxNjUsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MTA1LCJjb2RlX2NoYWxsZW5nZSI6InlUeUoyUkhyOERvMmhQSWE3UERidUdkMTB4S2o5TmJRaFBLM1Z0WkRGUE0iLCJqdGkiOiIwZDAxZWE5MGVkYWM2NzUxIn0.SOrK2gq0SDobHI3Jlno2iwUhaF9Uzrhgl9Y1F1aZISFVcLv3biPqVzKkPI3BNpRMMTXGZhCnLK165Bt8NeypGg"Ein verschachtelt enthaltenes JWT
} JWTeyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0MzQ5OSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiTWcxU2psMjBYa3B5UWcwZk13Qlh0eVhEc3VsdW1POTkiLCJvcmdhbml6YXRpb25JSyI6IjEwOTUwMDk2OSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJSZHoxTHVwbC1ROHplZXlvbzRDR0FVWl9qcHcxQ0p2RSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTc0Mjk3NTEwNSwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiYW1WQU04aEJJX0htYm02LXB1YU1oXzRPWE9SMEFFVjciLCJleHAiOjE3NDI5NzUxNjUsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzQyOTc1MTA1LCJjb2RlX2NoYWxsZW5nZSI6InlUeUoyUkhyOERvMmhQSWE3UERidUdkMTB4S2o5TmJRaFBLM1Z0WkRGUE0iLCJqdGkiOiIwZDAxZWE5MGVkYWM2NzUxIn0.SOrK2gq0SDobHI3Jlno2iwUhaF9Uzrhgl9Y1F1aZISFVcLv3biPqVzKkPI3BNpRMMTXGZhCnLK165Bt8NeypGg 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":"Test GKV-SVNOT-VALID","professionOID":"1.2.276.0.76.4.49","idNummer":"X110411675","amr":["mfa","sc","pin"],"iss":"http://localhost:43499","response_type":"code","snc":"Mg1Sjl20XkpyQg0fMwBXtyXDsulumO99","organizationIK":"109500969","code_challenge_method":"S256","given_name":"Darius Michael Brian Ubbo","token_type":"code","nonce":"Rdz1Lupl-Q8zeeyoo4CGAUZ_jpw1CJvE","client_id":"eRezeptApp","scope":"e-rezept openid","auth_time":1742975105,"redirect_uri":"http://redirect.gematik.de/erezept","state":"amVAM8hBI_Hmbm6-puaMh_4OXOR0AEV7","exp":1742975165,"family_name":"Bödefeld","iat":1742975105,"code_challenge":"yTyJ2RHr8Do2hPIa7PDbuGd10xKj9NbQhPK3VtZDFPM","jti":"0d01ea90edac6751"} {
"organizationName" : "Test GKV-SVNOT-VALID",
"professionOID" : "1.2.276.0.76.4.49",
"idNummer" : "X110411675",
"amr" : [ "mfa", "sc", "pin" ],
"iss" : "http://localhost:43499",
"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" : "Mg1Sjl20XkpyQg0fMwBXtyXDsulumO99",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" : "Rdz1Lupl-Q8zeeyoo4CGAUZ_jpw1CJvE",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" : 1742975105,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" : "amVAM8hBI_Hmbm6-puaMh_4OXOR0AEV7",Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"exp" : 1742975165,Gültigkeit des Tokens
"family_name" : "Bödefeld",
"iat" : 1742975105,Zeitpunkt der Ausstellung des Tokens
"code_challenge" : "yTyJ2RHr8Do2hPIa7PDbuGd10xKj9NbQhPK3VtZDFPM",Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
"jti" : "0d01ea90edac6751"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 | JWEeyJhbGciOiJFQ0RILUVTIiwiZW5jIjoiQTI1NkdDTSIsImN0eSI6IkpTT04iLCJlcGsiOnsia3R5IjoiRUMiLCJ4IjoiRUhPeUZGZ2c0MzVlaXppVVNxTS1BUnpQVkotNnFUUFl6VDJkT1ZCZjlsMCIsInkiOiJYUi02ZWRoLU1UWTlkU01OamVKRUo2UjBQTzEzeFl0TmQ5MzFSYVdqSE1zIiwiY3J2IjoiQlAtMjU2In19..xWhxPeNh5bf5VHUg.QJ0OWDkSf4eNjRYO_35EmLIJBYBZGjOubYvSZEySYOeDJisrkYLTDTu5PYO10veg4bXXH-b1k8Xk4rds4W0-NsJQevefNvLIzYinmq5emrj5KoKpjAlVLc4ipl0ziU4ug58uIHkoMr3j6KAOTilwvSbW57SYC2XCGg.--H59UCJ0gg39tY7HLRRHw 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":"EHOyFFgg435eiziUSqM-ARzPVJ-6qTPYzT2dOVBf9l0","y":"XR-6edh-MTY9dSMNjeJEJ6R0PO13xYtNd931RaWjHMs","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" : "EHOyFFgg435eiziUSqM-ARzPVJ-6qTPYzT2dOVBf9l0",X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "XR-6edh-MTY9dSMNjeJEJ6R0PO13xYtNd931RaWjHMs",Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256"
}
} Body{"token_key":"toBwqN7DFpu1fZUwGYreoQmLkKNO8hfHmaUp-UJyreI","code_verifier":"TLWkgQzDo2w-D7mhQM-YmIS0c1eZK1ZpFfx0bICYsR0"} 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" : "toBwqN7DFpu1fZUwGYreoQmLkKNO8hfHmaUp-UJyreI",
"code_verifier" : "TLWkgQzDo2w-D7mhQM-YmIS0c1eZK1ZpFfx0bICYsR0"
} 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. |