From 41b869b47685a0185b2fe3eab352c49216a75988 Mon Sep 17 00:00:00 2001 From: Gematik Date: Tue, 30 Jul 2024 15:20:38 +0200 Subject: [PATCH] v29.0.1 --- README.md | 5 +- ReleaseNotes.md | 7 + doc/tokenFlowEgk.html | 376 +++++------ doc/tokenFlowPs.html | 358 +++++----- doc/tokenFlowSso.html | 632 +++++++++--------- idp-client/pom.xml | 4 +- idp-commons/pom.xml | 6 +- .../java/de/gematik/idp/IdpConstants.java | 1 + .../gematik/idp/token/AccessTokenBuilder.java | 5 +- .../de/gematik/idp/token/IdTokenBuilder.java | 5 +- idp-crypto/pom.xml | 4 +- .../de/gematik/idp/crypto/KeyUtility.java | 4 +- idp-report/pom.xml | 2 +- idp-sektoral/pom.xml | 4 +- idp-server/pom.xml | 12 +- idp-server/src/main/docker/Dockerfile | 2 +- idp-test/pom.xml | 6 +- idp-testsuite/pom.xml | 28 +- .../getTokenWithSektoralIdp.feature | 96 ++- pom.xml | 44 +- 20 files changed, 851 insertions(+), 750 deletions(-) diff --git a/README.md b/README.md index e13a6b6..4feea90 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ or use docker compose: ```console $ mvn clean install -pl idp-server -am -Dskip.unittests -Dskip.inttests -$ export appVersion=28.0.2 +$ export appVersion=29.0.1 $ export serverLoglevel=info (default) $ docker-compose --project-name myidp -f docker-compose-ref.yml up -d ``` @@ -70,7 +70,8 @@ modify entries in the scopesConfiguration section of the idp-server's applicatio ### Configuration of Server URL -The URL of the idp-server is required for many fields inside the discovery document of the server. For example, the authorization endpoint: +The URL of the idp-server is required for many fields inside the discovery document of the server. For example, the +authorization endpoint: ``` { diff --git a/ReleaseNotes.md b/ReleaseNotes.md index b7d8217..fdd69a9 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,3 +1,10 @@ +# Release 29.0.1 + +- Java 21 +- switch to docker base image eclipse-temurin:21-jre +- replace hard coded values for ACR/AMR in access and id token with dynamic values by reading them from authentication + token + # Release 28.0.2 - update dependencies (unirest-java -> unirest-java-core) diff --git a/doc/tokenFlowEgk.html b/doc/tokenFlowEgk.html index d852856..8aa6f0a 100644 --- a/doc/tokenFlowEgk.html +++ b/doc/tokenFlowEgk.html @@ -454,55 +454,55 @@ color: #0fc5d9!important; }
Gerendert mit https://github.com/gematik/app-RbelLogger
Created Wed, 26 Jun 2024 10:27:16 +0200
Created Tue, 30 Jul 2024 13:55:10 +0200

1 GET http://localhost:43371/.well-known/openid-configuration127.0.0.1:-1localhost:33497

1 GET http://localhost:35601/.well-known/openid-configuration127.0.0.1:-1localhost:35139

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:33497
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:35139
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

2200localhost:33497127.0.0.1:-1

2200localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
3118
Date
Wed, 26 Jun 2024 08:26:52 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
+Date: Tue, 30 Jul 2024 11:54:47 GMT
+Content-Type: application/jwt;charset=UTF-8

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
3118
Date
Tue, 30 Jul 2024 11:54:47 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "JWT",
   "kid" : "puk_disc_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"x5c" : [ "MIICsTCCAligAwIBAgIHAbssqQhqOzAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMTAxMTUwMDAwMDBaFw0yNjAxMTUyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAzMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIYZnwiGAn5QYOx43Z8MwaZLD3r/bz6BTcQO5pbeum6qQzYD5dDCcriw/VNPPZCQzXQPg4StWyy5OOq9TogBEmOjge0wgeowDgYDVR0PAQH/BAQDAgeAMC0GBSskCAMDBCQwIjAgMB4wHDAaMAwMCklEUC1EaWVuc3QwCgYIKoIUAEwEggQwIQYDVR0gBBowGDAKBggqghQATASBSzAKBggqghQATASBIzAfBgNVHSMEGDAWgBQo8Pjmqch3zENF25qu1zqDrA4PqDA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wHQYDVR0OBBYEFC94M9LgW44lNgoAbkPaomnLjS8/MAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDRwAwRAIgCg4yZDWmyBirgxzawz/S8DJnRFKtYU/YGNlRc7+kBHcCIBuzba3GspqSmoP1VwMeNNKNaLsgV8vMbDJb30aqaiX1"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
] -}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
-  "authorization_endpoint" : "http://localhost:43371/sign_response",
URL des Authorization Endpunkts.
- "auth_pair_endpoint" : "http://localhost:43371/alt_response",
URL des Biometrie-Authorization Endpunkts.
- "sso_endpoint" : "http://localhost:43371/sso_response",
URL des SSO-Authorization Endpunkts.
- "uri_pair" : "http://localhost:43371/pairings",
URL des Pairing-Endpunkts
- "token_endpoint" : "http://localhost:43371/token",
URL des Authorization Endpunkts.
- "third_party_authorization_endpoint" : "http://localhost:43371/extauth", +}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
+  "authorization_endpoint" : "http://localhost:35601/sign_response",
URL des Authorization Endpunkts.
+ "auth_pair_endpoint" : "http://localhost:35601/alt_response",
URL des Biometrie-Authorization Endpunkts.
+ "sso_endpoint" : "http://localhost:35601/sso_response",
URL des SSO-Authorization Endpunkts.
+ "uri_pair" : "http://localhost:35601/pairings",
URL des Pairing-Endpunkts
+ "token_endpoint" : "http://localhost:35601/token",
URL des Authorization Endpunkts.
+ "third_party_authorization_endpoint" : "http://localhost:35601/extauth", "federation_authorization_endpoint" : "https://idpfadi.dev.gematik.solutions/auth", - "uri_disc" : "http://localhost:43371/.well-known/openid-configuration",
URL des Discovery-Dokuments
+ "uri_disc" : "http://localhost:35601/.well-known/openid-configuration",
URL des Discovery-Dokuments
"issuer" : "https://idp.dev.gematik.solutions", - "jwks_uri" : "http://localhost:43371/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
- "exp" : 1719476812,
Gültigkeit des Tokens
- "iat" : 1719390412,
Zeitpunkt der Ausstellung des Tokens
- "uri_puk_idp_enc" : "http://localhost:43371/idpEnc/jwk.json", - "uri_puk_idp_sig" : "http://localhost:43371/idpSig/jwk.json", + "jwks_uri" : "http://localhost:35601/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
+ "exp" : 1722426887,
Gültigkeit des Tokens
+ "iat" : 1722340487,
Zeitpunkt der Ausstellung des Tokens
+ "uri_puk_idp_enc" : "http://localhost:35601/idpEnc/jwk.json", + "uri_puk_idp_sig" : "http://localhost:35601/idpSig/jwk.json", "subject_types_supported" : [ "pairwise" ], "id_token_signing_alg_values_supported" : [ "BP256R1" ], "response_types_supported" : [ "code" ], @@ -512,23 +512,23 @@ "acr_values_supported" : [ "gematik-ehealth-loa-high" ], "token_endpoint_auth_methods_supported" : [ "none" ], "code_challenge_methods_supported" : [ "S256" ], - "kk_app_list_uri" : "http://localhost:43371/directory/kk_apps", - "fed_idp_list_uri" : "http://localhost:43371/fed_idp_list" -}

Signature

Was verified using Key puk_disc_sig

Signature

Was verified using Key puk_disc_sig

3 GET http://localhost:43371/idpSig/jwk.json127.0.0.1:-1localhost:33497

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

3 GET http://localhost:35601/idpSig/jwk.json127.0.0.1:-1localhost:35139

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

4200localhost:33497127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:26:59 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"x5c":["MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"],"use":"sig","kid":"puk_idp_sig","kty":"EC","crv":"BP-256","x":"llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk","y":"ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"}

4200localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:54:53 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "x5c" : [ "MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "use" : "sig",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
@@ -536,49 +536,49 @@ "crv" : "BP-256", "x" : "llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

body.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 1

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 1034953504625805

Valid From: 2020-08-04T00:00Z[UTC]

Valid Until: 2025-08-04T23:59:59Z[UTC]


5 GET http://localhost:43371/idpEnc/jwk.json127.0.0.1:-1localhost:33497

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

5 GET http://localhost:35601/idpEnc/jwk.json127.0.0.1:-1localhost:35139

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

6200localhost:33497127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:27:02 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"use":"enc","kid":"puk_idp_enc","kty":"EC","crv":"BP-256","x":"QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w","y":"mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"}

6200localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:54:56 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "use" : "enc",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_enc",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"kty" : "EC", "crv" : "BP-256", "x" : "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

7 GET http://localhost:43371/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=jfAy5SW6ly4XNPEQottsinjxD5OxNzha&code_challenge=vB9vlF5utKmVmWQ9RtEByltezLQxk_BguQ4LffKv_U8&code_challenge_method=S256&scope=openid+e-rezept&nonce=VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi127.0.0.1:-1localhost:33497

7 GET http://localhost:35601/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=HSrdlB75S_l-rsueB0cYuupPJsvJcrmT&code_challenge=uHvTZd8RgxXZBMrOMAVAUf78S8hcjH_pm7XCAyKxqL4&code_challenge_method=S256&scope=e-rezept+openid&nonce=7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI127.0.0.1:-1localhost:35139

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

8200localhost:33497127.0.0.1:-1

8200localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:02 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
-  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMzNDk3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJmVXltdXVJRF9hZThZS25MMktHRnNCUTYyeFFYMzRwb3BVY1huVUFhWDNVIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IlZEdFVTQTNQX0dtUzR0TENKUG93OTFEaTRyQ3lVY2ZpIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJqZkF5NVNXNmx5NFhOUEVRb3R0c2luanhENU94TnpoYSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MTkzOTA2MDIsImlhdCI6MTcxOTM5MDQyMiwiY29kZV9jaGFsbGVuZ2UiOiJ2Qjl2bEY1dXRLbVZtV1E5UnRFQnlsdGV6TFF4a19CZ3VRNExmZkt2X1U4IiwianRpIjoiNjg4OWZhOWE2ZTRjZGZmZCJ9.RpND6II5JxsNUV6MPDWBQG6IiRcO0YhE775_QKssjhyjXJLZQQQj8WI6nOk-eP17pdb4PXBlpEGQb3sKbPr8kA",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
+Date: Tue, 30 Jul 2024 11:54:56 GMT +Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:54:56 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM1MTM5IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJvMFQyMjFjVEt2dFR3S1h0QThJQmswS1haZVRDdUl2aVdXakk2ZTJMMnhrIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IjdKanBoYmhQZ0thY1pzS0ZfUGprWndyUG1vR3hmSUtJIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJIU3JkbEI3NVNfbC1yc3VlQjBjWXV1cFBKc3ZKY3JtVCIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MjIzNDA2NzcsImlhdCI6MTcyMjM0MDQ5NywiY29kZV9jaGFsbGVuZ2UiOiJ1SHZUWmQ4Umd4WFpCTXJPTUFWQVVmNzhTOGhjakhfcG03WENBeUt4cUw0IiwianRpIjoiMzZjMTNmNzU2ZGM1ODU1NSJ9.NZXI4ekmzDMs3qer4RQk5hlb8Kpf0qBESMuBOwKjL_BZ8oL5om1ObgNRon1pQ8PlODppdICQyBEWRKkJH1hzbg",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
"user_consent" : { "requested_scopes" : { "e-rezept" : "Zugriff auf die E-Rezept-Funktionalität.", @@ -593,136 +593,136 @@ "family_name" : "Zustimmung zur Verarbeitung des Nachnamens" } } -}

body.challenge.content

JWT

Headers
{
+}

body.challenge.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:33497",
+}

Body

{
+  "iss" : "http://localhost:35139",
   "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" : "fUymuuID_ae8YKnL2KGFsBQ62xQX34popUcXnUAaX3U",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "o0T221cTKvtTwKXtA8IBk0KXZeTCuIviWWjI6e2L2xk",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi",
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.
+ "nonce" : "7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI",
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.
- "state" : "jfAy5SW6ly4XNPEQottsinjxD5OxNzha",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "HSrdlB75S_l-rsueB0cYuupPJsvJcrmT",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390602,
Gültigkeit des Tokens
- "iat" : 1719390422,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "vB9vlF5utKmVmWQ9RtEByltezLQxk_BguQ4LffKv_U8",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "6889fa9a6e4cdffd"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key puk_idp_sig

9 POST http://localhost:43371/sign_response127.0.0.1:-1localhost:33497

9 POST http://localhost:35601/sign_response127.0.0.1:-1localhost:35139

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3978

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
+content-length: 3978

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3978

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
   "alg" : "ECDH-ES",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390602,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
+ "exp" : 1722340677,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
"epk" : { "kty" : "EC", - "x" : "Pv2Bn4gaS1zk3QnmjONqdzJjosb0hxP6m--JE4YbKGw",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "a1KJOTWuYU5EIxZxqTQBkJiyD9qYlm23DazTSGpkXm0",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "TPlBE512yFnYg6B-FoshQ5SEYPELDUo2_2FrKZEb8F0",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "HdXs_XiA-K5Whcp4GMiJ1PmJB3gmecQT2nbEFtgkKXg",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body

{
-  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwiYWxnIjoiQlAyNTZSMSJ9.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pNek5EazNJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKbVZYbHRkWFZKUkY5aFpUaFpTMjVNTWt0SFJuTkNVVFl5ZUZGWU16UndiM0JWWTFodVZVRmhXRE5WSWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNklsWkVkRlZUUVROUVgwZHRVelIwVEVOS1VHOTNPVEZFYVRSeVEzbFZZMlpwSWl3aVkyeHBaVzUwWDJsa0lqb2laVkpsZW1Wd2RFRndjQ0lzSW5OamIzQmxJam9pYjNCbGJtbGtJR1V0Y21WNlpYQjBJaXdpYzNSaGRHVWlPaUpxWmtGNU5WTlhObXg1TkZoT1VFVlJiM1IwYzJsdWFuaEVOVTk0VG5wb1lTSXNJbkpsWkdseVpXTjBYM1Z5YVNJNkltaDBkSEE2THk5eVpXUnBjbVZqZEM1blpXMWhkR2xyTG1SbEwyVnlaWHBsY0hRaUxDSmxlSEFpT2pFM01Ua3pPVEEyTURJc0ltbGhkQ0k2TVRjeE9UTTVNRFF5TWl3aVkyOWtaVjlqYUdGc2JHVnVaMlVpT2lKMlFqbDJiRVkxZFhSTGJWWnRWMUU1VW5SRlFubHNkR1Y2VEZGNGExOUNaM1ZSTkV4bVprdDJYMVU0SWl3aWFuUnBJam9pTmpnNE9XWmhPV0UyWlRSalpHWm1aQ0o5LlJwTkQ2SUk1SnhzTlVWNk1QRFdCUUc2SWlSY08wWWhFNzc1X1FLc3NqaHlqWEpMWlFRUWo4V0k2bk9rLWVQMTdwZGI0UFhCbHBFR1FiM3NLYlByOGtBIn0.V2P6x3d63mZeTurezWoDP24G9taZP0wEzCjJHs36fVtaS3Sq7_KUtBmoLLz9_hZBOkgzo7D6u92fpwhZDjU9CA"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content

JWT

Headers
{
+}

Body

{
+  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwiYWxnIjoiQlAyNTZSMSJ9.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pNMU1UTTVJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKdk1GUXlNakZqVkV0MmRGUjNTMWgwUVRoSlFtc3dTMWhhWlZSRGRVbDJhVmRYYWtrMlpUSk1NbmhySWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNklqZEthbkJvWW1oUVowdGhZMXB6UzBaZlVHcHJXbmR5VUcxdlIzaG1TVXRKSWl3aVkyeHBaVzUwWDJsa0lqb2laVkpsZW1Wd2RFRndjQ0lzSW5OamIzQmxJam9pWlMxeVpYcGxjSFFnYjNCbGJtbGtJaXdpYzNSaGRHVWlPaUpJVTNKa2JFSTNOVk5mYkMxeWMzVmxRakJqV1hWMWNGQktjM1pLWTNKdFZDSXNJbkpsWkdseVpXTjBYM1Z5YVNJNkltaDBkSEE2THk5eVpXUnBjbVZqZEM1blpXMWhkR2xyTG1SbEwyVnlaWHBsY0hRaUxDSmxlSEFpT2pFM01qSXpOREEyTnpjc0ltbGhkQ0k2TVRjeU1qTTBNRFE1Tnl3aVkyOWtaVjlqYUdGc2JHVnVaMlVpT2lKMVNIWlVXbVE0VW1kNFdGcENUWEpQVFVGV1FWVm1OemhUT0doamFraGZjRzAzV0VOQmVVdDRjVXcwSWl3aWFuUnBJam9pTXpaak1UTm1OelUyWkdNMU9EVTFOU0o5Lk5aWEk0ZWttekRNczNxZXI0UlFrNWhsYjhLcGYwcUJFU011Qk93S2pMX0JaOG9MNW9tMU9iZ05Sb24xcFE4UGxPRHBwZElDUXlCRVdSS2tKSDFoemJnIn0.cK4T8-rsfj3keLBBx6jvhxHjGX6sIT7yu0RnCGlqu5yR7C7nUVjdl_rkrK0uYSh1W_xFlNdTE1Hc1TSy-kaH0Q"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content

JWT

Headers
{
   "typ" : "JWT",
   "cty" : "NJWT",
   "x5c" : [ "MIIDSzCCAvKgAwIBAgIHA25VKAHcvzAKBggqhkjOPQQDAjCBljELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxRTBDBgNVBAsMPEVsZWt0cm9uaXNjaGUgR2VzdW5kaGVpdHNrYXJ0ZS1DQSBkZXIgVGVsZW1hdGlraW5mcmFzdHJ1a3R1cjEfMB0GA1UEAwwWR0VNLkVHSy1DQTEwIFRFU1QtT05MWTAeFw0yMjExMjQwMDAwMDBaFw0yNTA1MTkyMzU5NTlaMIHOMQswCQYDVQQGEwJERTEdMBsGA1UECgwUVGVzdCBHS1YtU1ZOT1QtVkFMSUQxEzARBgNVBAsMClgxMTA0MTE2NzUxEjAQBgNVBAsMCTEwOTUwMDk2OTESMBAGA1UEBAwJQsO2ZGVmZWxkMSIwIAYDVQQqDBlEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvMT8wPQYDVQQDDDZEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIEdyYWYgdm9uIELDtmRlZmVsZCBURVNULU9OTFkwWjAUBgcqhkjOPQIBBgkrJAMDAggBAQcDQgAEHlNcoznjdoi0Yxv27B3yGaE/19vjOJI78wT2yDcec+mWAlRc/fE/ByhPc/IOLkgsaZmbKuNQhhepE4PQ4qtYDaOB7zCB7DAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFESxTAFYVB7c2Te+5LI/Km6kXIkdMB0GA1UdDgQWBBRKV33xfqk2Htd8LzU4tJTYXVLtmTA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wDgYDVR0PAQH/BAQDAgeAMCAGA1UdIAQZMBcwCgYIKoIUAEwEgSMwCQYHKoIUAEwERjAwBgUrJAgDAwQnMCUwIzAhMB8wHTAQDA5WZXJzaWNoZXJ0ZS8tcjAJBgcqghQATAQxMAoGCCqGSM49BAMCA0cAMEQCIHuswBIIMTvWRf+b5Pu8nt9mEZ1+Fd8o2B3e2atV2c73AiBpAMFuIY2JICTi5n1Yj6rw94ZLsiEfSJW7mu2eU2Ldaw=="
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "alg" : "BP256R1" -}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMzNDk3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJmVXltdXVJRF9hZThZS25MMktHRnNCUTYyeFFYMzRwb3BVY1huVUFhWDNVIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IlZEdFVTQTNQX0dtUzR0TENKUG93OTFEaTRyQ3lVY2ZpIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJqZkF5NVNXNmx5NFhOUEVRb3R0c2luanhENU94TnpoYSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MTkzOTA2MDIsImlhdCI6MTcxOTM5MDQyMiwiY29kZV9jaGFsbGVuZ2UiOiJ2Qjl2bEY1dXRLbVZtV1E5UnRFQnlsdGV6TFF4a19CZ3VRNExmZkt2X1U4IiwianRpIjoiNjg4OWZhOWE2ZTRjZGZmZCJ9.RpND6II5JxsNUV6MPDWBQG6IiRcO0YhE775_QKssjhyjXJLZQQQj8WI6nOk-eP17pdb4PXBlpEGQb3sKbPr8kA"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
+}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM1MTM5IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJvMFQyMjFjVEt2dFR3S1h0QThJQmswS1haZVRDdUl2aVdXakk2ZTJMMnhrIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IjdKanBoYmhQZ0thY1pzS0ZfUGprWndyUG1vR3hmSUtJIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJIU3JkbEI3NVNfbC1yc3VlQjBjWXV1cFBKc3ZKY3JtVCIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MjIzNDA2NzcsImlhdCI6MTcyMjM0MDQ5NywiY29kZV9jaGFsbGVuZ2UiOiJ1SHZUWmQ4Umd4WFpCTXJPTUFWQVVmNzhTOGhjakhfcG03WENBeUt4cUw0IiwianRpIjoiMzZjMTNmNzU2ZGM1ODU1NSJ9.NZXI4ekmzDMs3qer4RQk5hlb8Kpf0qBESMuBOwKjL_BZ8oL5om1ObgNRon1pQ8PlODppdICQyBEWRKkJH1hzbg"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:33497",
+}

Body

{
+  "iss" : "http://localhost:35139",
   "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" : "fUymuuID_ae8YKnL2KGFsBQ62xQX34popUcXnUAaX3U",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "o0T221cTKvtTwKXtA8IBk0KXZeTCuIviWWjI6e2L2xk",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi",
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.
+ "nonce" : "7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI",
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.
- "state" : "jfAy5SW6ly4XNPEQottsinjxD5OxNzha",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "HSrdlB75S_l-rsueB0cYuupPJsvJcrmT",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390602,
Gültigkeit des Tokens
- "iat" : 1719390422,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "vB9vlF5utKmVmWQ9RtEByltezLQxk_BguQ4LffKv_U8",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "6889fa9a6e4cdffd"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key x5c-header certificate

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key x5c-header certificate

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

10302localhost:33497127.0.0.1:-1

10302localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
0
Date
Wed, 26 Jun 2024 08:27:04 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&Optional[ssotoken]=<SSO-Token in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
&state=jfAy5SW6ly4XNPEQottsinjxD5OxNzha
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
+Date: Tue, 30 Jul 2024 11:54:58 GMT
+Location: http://redirect.gematik.de/erezept?code=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDU1OH0..rqZuVNnge11ca0wk.HNKF7zPI_BK45351rnuLS7zP4tUcV-VKYGDUB7x6qfQgealDIjsfOEkHSfQnk7II5ajEXzhmyzV3ZV3nu0NSNLJ8Xf6W-0kzIvJ57kgHVJhBAfXDvvXemMHgKeDMKOnBeHXdNX8JuFP6aIx3cDpTVbidTd1Mqo0Bg-4dYh01FOiGJyL4Oi1-gZrT4535pWfa_81XJPnfoJVD0NCp2cLl4f70khU5M7XPv60zus-tl0v7IUcVZrdZDJ8uu3rHhTgiGEopmuW_o2rlXPAZQ8ATSy0-nnHvUUCTW9egT3E_pkp-ACr5IUHOybHQr51l2f5HkQRAGV34pXCOExwJ0KSKLPnOQOKNXqCGLYf4lUq74bJBMlOf2AUwN9egSbUojzRdRNfenee3vPLxBhjkNKYelAHP9DFatjH0hU3a3TKPUuOkyuJ17bLF28AXNp28ZWzJEM-2NznnmRX7lMFZHU7zVCdEkOKB-ZdaNcwr23VB7vO9mFeUDh19xFBPSHaDa_XPaYRjuMfXn_lDWlwv-Q5cO81n7bgsT2r9H5MhyE2x9J3peIr5ULbzO65sCwL2EgEFEsdc1qUQc0JJwRT_wbw88hkpLmA7sAzm4Cfy6fhS2wvYvj2J8Pe_556Joq2sYnnHcdKPyiWwbj6_lv63Vp3DOMNFU3A3SlzNIG7Ushjtm4ZxiEjZ1l1vOX4rjEX_Y7MEh-KlWEBan7OvrNNKGPxZoPRwDJnFiCxw77vwMxMoFsTxqmVljFmzm3-JX44yoiVHoG_LV0ddggXRUGvsVAJscVEZwIKwSk1JKI2WkAMPepkhOPHTSqyfWREQsiFbBFthq_D_J2rArxTK2V54hx2D1cUDP_pFMKXmYkSLRJBdw-ZZff9hq3MQDyguZ1C6BxM0vAHJFQY6EU7T-Ehl1ghOSFrT653UAK30I7Rmdc3utEcYoS5qt2fTE0OIYcdn4YVvBfFL__5TqiNu-YQJ_L_Da6NAiK0szK3OAuQ_RzJ79PYjQkCfR18DSfl3kbojHNuxud1yXIkK06yypLtQVVqd4ESidzfZuN6pLTyNHDwV7Z4rjg71uDTgZDAmurJ4N9amyCJIq4fEI-wl5qD6Oi6d6TFi250FIqHk2rgp1al1KUSQrfvBrMKAir4zEzGZ0o1b8glc7Fd0uHd3pMvNLU5g7ws7Ti5pqU-kZ1R6F9GXCDo4CV1He-9RgR6JjogbvDFx1C6mqfRVgjtO_e4-sV1gMvUF8S9TPtuHHa_asLutkqQ-KJpZsBk2UI-Fx3-hGC69ANk8hz534hqMqGnPS3NqoDoDZ7kZu9OubCt9XOdmFTAnRmpP5k399CYvMq8rPuM5qhjbDAOu5ZzoD0Kj4RrN3_BxQMxGlIyjNXc3xYxeTjZZ-xtIKz0CV4K2xK2eQS686Je-O899qr4P.j17MXqq6ndAk8rkMbDJ3FA&ssotoken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM4MzY5OH0..lbrzmjpnxAgiIqgb.GgsVb_SSa7SINlvqJpgb1fKbK7CjgcfSwdKekCGOpRwr6OzRjBtwEoLXuAnUuMBEol4Dn5YfKngTz8S8NmcvaKL3t_qPsy0Zmqv4f9t_bxap4bCcLqgPlhJl-gdO3q8TxJm0u8nORK1A92KuETRqamMerzCiepHN4w7asjjhWiCiWEuSjo9L2GeiFpGvthRms8nn8gEwiCldRrVSGuWj3_5RE4RRqTEmocJg62c_NrUbBEV0C45JRcRi-AMt49PXckuDs3O2nmW-QI03HSUl3AY9JYttU0eeqahD08ByTWSDsfrsVF5lH6fCeO5KxRvjO1f7cOtH85KFotB7QPqUgohP0qrAW3wSt6UeDJa7Wn6N_Xwblp5mFeM309vdcXNLom4OYDbDgw41QFXpSdPMvDM0FpYavujk3LSIUG8t2vc29Ec9BA8kT90tMGVo3qdEfGYpQ4ZbtvGL2xk6rK7YWlGtghM8fZpsnKkDn9JbMmwbmaC28CrE9dNZFfi3GkO_bfRgkie-YFeok8Wv4cAgvF5PvfsMCi2j18pCU5JRSUbAlrSlgHfTcTIa8Fp2IISQDCHldwab7iq0cdj86Q-JFDPXoANLQvAJ3mYTMV0ce3WzRc5HaCmIB-9I3ZAMnZdrkmRFqw5G9kiRmPZNeIEdeTvzdAxxDbxw69wEfGqSA8tVcqbZcK8t9MfuA14JFH5gscFhkcLyOr4CL0DjHEZppKp9Ze7_FAl8C-ReJvxCsl87kYK1UINaiB2OAbUvcIlSIyHxICCgNKzL8LKTiQRCXrhnbs1hLlZG2x1CIKrsfpsRtIjfFA19PcHwda-4vvqkWUEgjQs2sSZTCGSFmReXWxb1fl5Ah52BmO4fj0JyfW3cNS2PBg2fn5nS8WoufgQ6L4q38OI3r57nfK_3sMkYLEb8MhHU2xweiU7pWd-i339K5GP5G8EDpaRYPL3tI_4hrPQVhu59NydNrW8YCidU2CYIu45ZVkUqRQx6-TieN_wfi0mlBUzglsR7PdXtTxuR3xQ_3_CxeuCxnp7ESCeHPoLvXWC_8giIoN2FcarGnm_hE7jZkCX49qIPNidwRfR4huUFp8-9RqIWabX6VxRHyFSeVR3pXi-d3lDwGMpOhEz_ipMRhsZMtL9Gi4_bnYMXnu0s4Sv2P4vdTzr3IuNHHI3QBvuavmrrmov4L3pOiVFxqQNynWrkDkVqZXF7eDNsDCX-vhmCDW8DVlQDSpWxYBVJ3cU5g-FaB3Ta5qG_n6b-5Sk-NAzHbm_tfOFYNK0Crpnqp2ybhVU5uaP06cVQGm7Ia9-aua5x1WZQp8NdFWSje48szcj6ZPD7RUnnQE2hhOgO7Icoc1C9ltOmsvCqjRebakFk7auO6jz04cXelzDFCPolUNEob7Hi8-PoDf_SLQ2gBzlzchEvRoBvP2885OkUz77kjrKzoRTFA0oelY46JqXbmZO_RYFuCCqszzhFhH53HJ3QYiBYinGBBxnphyHndlpg1NUS0GQF71b_Q1OSiQHNmzZcYFRF31BsXkVWFFOYuPbzFmhWSGWaE41UZ6-o5te31BgTU1rdy2m2-B8zcP-vtSzJ5TPQPyKzUDg46a8ho0Y1FLfGf5qf7UwPlgYdNpZAfQwVUhV5FPcDhsTGxuXf3Zlsnka1bGvJoCvYkjLAIfzvvJgcSMYteCiGJqaG8MSWtzMpX1B-WdoVqqQ8KiovTwhBhmFtCuiLqhhq2hHiC_nXtigTVh47dGT2yQqV0_erANVxRTmEyC-a1qlOERJYDSFTBkRqqzF4Cj8j3mRJCXg1oLeLoZ_TMktxL6Y7xJIseQfYpbc72-ihVkRDg-t8LQc8teAqOCNFN_G5whMZOKdhkrRXqfFMf6K5uk1yJNN-_zPqoUZh0Y49uBHFOiHYqhcWrfVYmCxGV6lOBqKH25GKt2J1fu7fs3YT7orbd4B_Ktp3HOS-w5GaqfG2Cs60XpVdVNjc8WldoSoXTlZMDg7TwAajEJie_S_U0FFdoqP4AuXvyPARU0MlmyZ6UYkg2YD4bP2hGGvIIolkJMvtMypx4yud1nmrQ4ZLJJg9IcGq4PZ0RnrwxVYfe_OX6tF1C5pPanl83O9osxvQWyml15A1OFsIP6xsekq-6CUaKj4YnN3vr5hVfNZsv39pPnjpzI4c-MZJxTuDXzhSQmdmRODTCs06NGLKFcMeRIWFGK7uQaqIuR5zDabp9kimrDBQbwckc4-bBdlVIZp5SdbEpmGArp8f3t8RR5Pj50f4iDcxmLIfCwgoHDuLRYJePHRwai8TXWDeJGuaA-tdqjm_f5NsmPUEILrKcbbGnEmSrTR7cp8ZWL7BeUpn-wmhq0iKf7W2_IchqO_B7tXe-mL0zXt7uJHRdLZejdsiFT-3-E0H_wHWwg0j6qOlPAn3zNbs_IG3Kfuq1k8WoLhBFvcUeQ_FjBEyo7dBg6mMA4NCrOeKuhJYOxD2RHWdjWBAOGsWPMN27Ak8ZUCGgcZXXD5tiKqI6ubv0bE7w_-WyzchSE5VHgSfDKOjFoFQfm39O_JDQ3irIwlJhV1fW6HwhRc4lAN9GS1ixUhk6KjUPbDgh5YljYXluoaWM3ZlhWz7X8pUurZ6FQpYarormqGHSL4zmTxY6Hhmt0yl6Y5FlhkazHiGMfkyRTZhZpZaGFYcsQJsqcAqGltrehx9yB8kjVJs--1Bn12A49vSoEKDYn-_KVGFB-5riSgCr6rUO5ESRw1WR-mbH4lYLE0w_8PbE8-7ymDMBtASOBNri_BB3TTyrR8Qej_xG4_Ujp_Lcc6ifcplkn_qQkKhO42T-FCxdJ0rfXJxKUntmuXUYb12G0BrJP3uYmS4xZNZxDVMfKwld2n9Ftsa9n5swpIwl7oYmP32KnBvr2csM4WvWspye7Dc0rxV4HVOeBbWacra5jh9eGdmwre2amMyttgcCa97tXPd4lRFofeCkvIqwHHdjpn3v6i-Fu7Sl1m73jlputSIpQptNhnWp9o-71BOM4rXCYmh6P0w63j7ZAoxHFFzp5971RwbnJaAC5vKZ7R2z3GBhCmu.L-SFlawGBNJi7fofGnWfTQ&state=HSrdlB75S_l-rsueB0cYuupPJsvJcrmT

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
0
Date
Tue, 30 Jul 2024 11:54:58 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&Optional[ssotoken]=<SSO-Token in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
&state=HSrdlB75S_l-rsueB0cYuupPJsvJcrmT
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390484
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzQ5NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiYmpBYU5TQi1QRVF0el9lY3RYUXdoWjJuNW5QVlgxaC0iLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiVkR0VVNBM1BfR21TNHRMQ0pQb3c5MURpNHJDeVVjZmkiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0MjQsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6ImpmQXk1U1c2bHk0WE5QRVFvdHRzaW5qeEQ1T3hOemhhIiwiZXhwIjoxNzE5MzkwNDg0LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQyNCwiY29kZV9jaGFsbGVuZ2UiOiJ2Qjl2bEY1dXRLbVZtV1E5UnRFQnlsdGV6TFF4a19CZ3VRNExmZkt2X1U4IiwianRpIjoiZjY4ZTE5NGRkYjhjZTFiMiJ9.UhJDaMWRwg3TDBDNsqvL9QrpIhVP7kJ9LMCA5-K_OjVIEWFgCtZEAFE5VhIPYeDO4qo9YSLNdsKczT1zSDj-Og"
Ein verschachtelt enthaltenes JWT
-}

header.Location.code.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340558
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNTEzOSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiSUY4bWlzaFZuekxaaDdJVjB5Uno0SHNYWGZ5Vm4zZnkiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiN0pqcGhiaFBnS2FjWnNLRl9Qamtad3JQbW9HeGZJS0kiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA0OTgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IkhTcmRsQjc1U19sLXJzdWVCMGNZdXVwUEpzdkpjcm1UIiwiZXhwIjoxNzIyMzQwNTU4LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDQ5OCwiY29kZV9jaGFsbGVuZ2UiOiJ1SHZUWmQ4Umd4WFpCTXJPTUFWQVVmNzhTOGhjakhfcG03WENBeUt4cUw0IiwianRpIjoiZDllODgwNmM4YjJkNmFjOSJ9.hFpyBpY983YK-DEjDW2_qnA0LnOAZyBYDxgIveRKyKNFYX4mL0aGO9ZtNk08i99Nyx27PDDrFGEgfvDii0Y6rA"
Ein verschachtelt enthaltenes JWT
+}

header.Location.code.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:33497",
+  "iss" : "http://localhost:35139",
   "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" : "bjAaNSB-PEQtz_ectXQwhZ2n5nPVX1h-",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "IF8mishVnzLZh7IV0yRz4HsXXfyVn3fy",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi",
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.
+ "nonce" : "7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI",
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" : 1719390424,
Timestamp der Authentisierung
+ "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" : 1722340498,
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" : "jfAy5SW6ly4XNPEQottsinjxD5OxNzha",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390484,
Gültigkeit des Tokens
+ "state" : "HSrdlB75S_l-rsueB0cYuupPJsvJcrmT",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340558,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390424,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "vB9vlF5utKmVmWQ9RtEByltezLQxk_BguQ4LffKv_U8",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "f68e194ddb8ce1b2"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

header.Location.ssotoken.value

JWE

Headers
{
+  "iat" : 1722340498,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "uHvTZd8RgxXZBMrOMAVAUf78S8hcjH_pm7XCAyKxqL4",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "d9e8806c8b2d6ac9"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

header.Location.ssotoken.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719433624
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MTkzOTA0MjQsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzE5NDMzNjI0LCJpYXQiOjE3MTkzOTA0MjQsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.TjrkzPoYUglaT9niETHQD790rgT5GX7OBn_IeH6OwC6fvmIWNVg9y0r-eHWvHmCfGmIl-AhcEJmjmT92qJk8xA"
Ein verschachtelt enthaltenes JWT
-}

header.Location.ssotoken.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722383698
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MjIzNDA0OTgsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzIyMzgzNjk4LCJpYXQiOjE3MjIzNDA0OTgsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.kUwLX3lD6ZXiFpt3jZSsbwupRdkj_MRG37jQEPPP1jV9MJM8pco6wrahUE8iSQtu1lLzbi9P1lxKJONQPyLF-Q"
Ein verschachtelt enthaltenes JWT
+}

header.Location.ssotoken.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
-  "auth_time" : 1719390424,
Timestamp der Authentisierung
+ "auth_time" : 1722340498,
Timestamp der Authentisierung
"amr" : [ "mfa", "sc", "pin" ], "idNummer" : "X110411675", "iss" : "https://idp.dev.gematik.solutions", @@ -735,99 +735,99 @@ "y" : "lgJUXP3xPwcoT3PyDi5ILGmZmyrjUIYXqROD0OKrWA0"
Y-Koordinate des öffentlichen Punkts des Schlüssels
}, "given_name" : "Darius Michael Brian Ubbo", - "exp" : 1719433624,
Gültigkeit des Tokens
- "iat" : 1719390424,
Zeitpunkt der Ausstellung des Tokens
+ "exp" : 1722383698,
Gültigkeit des Tokens
+ "iat" : 1722340498,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld" -}

header.Location.ssotoken.value.body.njwt.content.body.cnf.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

11 POST http://localhost:43371/token127.0.0.1:-1localhost:33497

11 POST http://localhost:35601/token127.0.0.1:-1localhost:35139

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2111

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde

Headers
{
+content-length: 2111

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2111

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

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" : 1719390484
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzQ5NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiYmpBYU5TQi1QRVF0el9lY3RYUXdoWjJuNW5QVlgxaC0iLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiVkR0VVNBM1BfR21TNHRMQ0pQb3c5MURpNHJDeVVjZmkiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0MjQsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6ImpmQXk1U1c2bHk0WE5QRVFvdHRzaW5qeEQ1T3hOemhhIiwiZXhwIjoxNzE5MzkwNDg0LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQyNCwiY29kZV9jaGFsbGVuZ2UiOiJ2Qjl2bEY1dXRLbVZtV1E5UnRFQnlsdGV6TFF4a19CZ3VRNExmZkt2X1U4IiwianRpIjoiZjY4ZTE5NGRkYjhjZTFiMiJ9.UhJDaMWRwg3TDBDNsqvL9QrpIhVP7kJ9LMCA5-K_OjVIEWFgCtZEAFE5VhIPYeDO4qo9YSLNdsKczT1zSDj-Og"
Ein verschachtelt enthaltenes JWT
-}

body.code.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340558
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNTEzOSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiSUY4bWlzaFZuekxaaDdJVjB5Uno0SHNYWGZ5Vm4zZnkiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiN0pqcGhiaFBnS2FjWnNLRl9Qamtad3JQbW9HeGZJS0kiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA0OTgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IkhTcmRsQjc1U19sLXJzdWVCMGNZdXVwUEpzdkpjcm1UIiwiZXhwIjoxNzIyMzQwNTU4LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDQ5OCwiY29kZV9jaGFsbGVuZ2UiOiJ1SHZUWmQ4Umd4WFpCTXJPTUFWQVVmNzhTOGhjakhfcG03WENBeUt4cUw0IiwianRpIjoiZDllODgwNmM4YjJkNmFjOSJ9.hFpyBpY983YK-DEjDW2_qnA0LnOAZyBYDxgIveRKyKNFYX4mL0aGO9ZtNk08i99Nyx27PDDrFGEgfvDii0Y6rA"
Ein verschachtelt enthaltenes JWT
+}

body.code.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:33497",
+  "iss" : "http://localhost:35139",
   "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" : "bjAaNSB-PEQtz_ectXQwhZ2n5nPVX1h-",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "IF8mishVnzLZh7IV0yRz4HsXXfyVn3fy",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi",
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.
+ "nonce" : "7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI",
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" : 1719390424,
Timestamp der Authentisierung
+ "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" : 1722340498,
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" : "jfAy5SW6ly4XNPEQottsinjxD5OxNzha",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390484,
Gültigkeit des Tokens
+ "state" : "HSrdlB75S_l-rsueB0cYuupPJsvJcrmT",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340558,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390424,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "vB9vlF5utKmVmWQ9RtEByltezLQxk_BguQ4LffKv_U8",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "f68e194ddb8ce1b2"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt.
{
+  "iat" : 1722340498,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "uHvTZd8RgxXZBMrOMAVAUf78S8hcjH_pm7XCAyKxqL4",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "d9e8806c8b2d6ac9"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
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" : "erGiIyRb_XBLgocKEz_nj97MP1CRGAl5g1_CHv8Rqfw",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "KUXOikqbBMH9PmTwNbj8GvGaWn-mA_HYUqyZ_6RhDpk",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "ROptz25MG4WfJad78OjbvQd9Hol9GXD5QsLMCjEJ9VE",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "fGDa7pZp7A1A6__qnFcpn3wZdu-xN6XZZMxd9Earjp8",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body
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).

{
+}

Body
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" : "JWjTrVwXWLi1f8aVXPnNqzBq0K0K5oZ_5bni78q8h_w", - "code_verifier" : "C8faMS8FJ1-6X1ZFtMBcJquydKAG3vnAw47pMwBQHVU" -}

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

12200localhost:33497127.0.0.1:-1

12200localhost:35139127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:13 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+Date: Tue, 30 Jul 2024 11:55:07 GMT
+Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:07 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "expires_in" : 300,
   "token_type" : "Bearer",
-  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDczM30..k0phatF4cCeIGNgp.q8OZ1H3CNcuVgKNXK5Oikc5aqPF23H11mplu3Ref_d3jAFmz79yKVL00neVLiuSLutkiThZG7zNk_iG7A9_rqLzw6wSv0kgJjQp8ZL38D8sjIWNGlkw0UPWwbGEtnfhaVKI4f8J_itmlcECsk9gRXSDCAe23CBDr2nwJelBYp6Xh3LdjR1Kc_eVcGNxcD3Ps4aj3wZ-2LAM7C9upkFIzD7cgGHuoPNci6RYw8tH0vdRmw15I4ku7gRB_04LK90P32vPhEv84fec2Febnu4rY3eqYZa9IMUb_mdrYH74eVpDHhIWsZA13AsWiopjF0Lb7lQD0jXzslOi12N1c4DLQziHSoGdRyHmnkzjvasSUuceHcjiCDMycNECDoaEUXhkFYmcypKAveNGszv9tm4ZXGKoXBsmxGGi0wvjTAor3NBrXuSHBZXZlHBLiYcvRaR9k3jK2e86D_iPw6PH1mN75VyOJ5aIEWys4iC00oAk8dv4vgFkj5fzz3mehiRpaDDtIW44rrACWPFWcvVhqiWhcJY2XSLYloLquTlf3QFFe_Wf6b1qwTMHjMs4PtZD_Ox387mZTm4lJvhtXz9V5kI_uSfD9dt4AktHU-ebJCKYS4O6JRtIBB9NbeVx51cIKVgW6YSLyrkrsNmL4JDcyOtanZ1yILO-XInHfiAvv0s9JS0KfD-r5hutzTPU1aWDvj40UxO1H1BtW9q2fqk5Zm42zD-uU6LKtx0U6m8RtIcLpXRegNZsGAEYHhW_wT5nOG-JcB1OCFTMhR-CerfOWa6sjCtNvwBgWTOx86CQsdCDtTn26NB38H6nEue4Oqc5sQGLhoDV2E_qCBhQNcgjeqBaK56JWyOqIIHPEQS9DofvvC2J-K-M-F4JWN7mmemQtjCL7zcQgF_Dz6GATwkyZAkv6WQ5X5Bz1EQZb3GCOXkpjMmCOdO4YSwnd-bEyCNZlQ3Wh2svnveU1IzRjdCN5lX6lLaOZVRMRAgd6hkyuyia5XTwsaPhdbMU3yt83WK6oNv-mfdpzI57E8YWJAF57bJG8bPbaa5HoVLyrDWOQXqSXz0I7xO99T_cvztY3MsPI7a4uCU-17B_WOdFj6vZcsBYYLKVx_Apy0ADDoSVavKLJiahem1iov19XNQTQAFRWhmWkkxmUO6BaYUxBRFisXJIAWNzEfhRrdF6jHdVgQ-PaOThr0fGhbcugCMxnw6R-GLasizegcpK-bdffBj5ENbIYRwE.FDJMtQDS91UQd0VbLhjTCg",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
- "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDczM30..w1Gvk5sI7fjyssZP.0CAujarHzXmRRuR7Ugb-P3C0THZ1rBClQOxXXChz8CqYv3ymjBzI-jj99q3iHPNXaY6-BRcGZtmIhW5BmZCoNfl6-OfuGxYi_EApQwPeEH_9BIwEu0_mCx4lJ2nXRvHHJsSaOIUaZB11KXPeDZoS1ne1fRODE9irzlR9286G52dLjcsrdYvZ87M8GiG2678ZAq5JVoXmh_dDk_OZUyHoOFlcWWGoXcDdSsUfQrL52stxOXdjZ18iLuar5hsT-5PW3H3yve3gJLt7BKfNOd-Ia16YDF8aJlaJfTiLwGBK-R7DPot3ZAWXqYdlvT2Ju6zAloNtY0EL7Y3sEFiG8RY4G0tC7abySKIprsgDuM3Xf_djJd77x5-dEnBmGMuMvgXzJ1HG2rNg-DRO9HO0ifWhPrcktSiIyPlQCF24cawPiW2-6vjieWWnmRgj8p93jMAULX3XQNS-mIoUCzopMZaKv6uLje8Ib5-rbVjJolWBNZSyyrMvMfpmPQ9kf1QMatZxnd6s4NlUYsttqsd_dlXACZhXr01Kn2mIJuEORWiixM3rOXTGCawbWXzCfgt1noB_6ihN7g-iwypndqTRxsGMSYEBvTpx8w1h7BiCpO0YBuo-2hG075W2IKjj65JWgfCPtZZhACIM0im9hNfYiAIh7cIujuW6DYNazvBTdHyCGND7yYfueT56ruqheNKmXmXgZlL6kx-qLfwFIyi8w8rPT5BlJorAndBfFkExm5YdXvbWtLWpjIJ-uX_zbYlsBbmo_UhgmilJ4ibwzCTyq9VwVsrlvJDRX6Kp_INEdesgjNxHPW_7LckNAeuy_5yzuhNkqxBjsmSe-hcJD5LmtMPd_kOYairg3XV5mLasHYhDowE-WzdA1aKapWXm5LXQee1CRNt-bw-6O3IdbSwQMnpXSzpkY7TiNW9PJqB091ZQKl7kseMlg8231qbMSIfYCM34Ba5WhIYjuH9IufrIZ-lyulPC0IzUm45wb7S4yFdU6pdN63H94kGr9GmCE8KRZyjhmWP3ZQxrZJvcgOMosg4Eyfr-oIUEgS6RfmokgQcf2hGtu0Szqdrlwdw7ynkxbzWWzs1Ui57DudsNbFSpDiPav5UvAxKt6CyDbQwzaZGaNVQ4s_ohB0JLeKRe6d7goDNQJheZlo-bDGCK3lm2pttQu2B2rvCcpNMMVE-4C-WAYTSauTBO0dpvgSM9YonlH54vdSu6Wl2wQmwFQc_wkckBg1trHqSVO8hkGXMevI_pnnGtNzd3M2dGMvM.kDeEy0hT_iE_vlkzfKBmMg"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
-}

body.id_token.content

JWE

Headers
{
+  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgwN30..lil_lluo2kRz34Jv.Zb8aSXKw7b08pr-1sN17g7fV6HhUdKWLzfO6yxssoISB00XDHMhcLvhl6rM_PXN9CP7BF5GQloroIPLOGs_kv4mqmZ52FgnZOuCaoe0bFrp5P16ynQjOfxlTuv_22IKmnLz87_SHY4GHFT_dQrldTOmf7bzH1Y0rFcG9MlkKMl6h5zdDPNs6MEi3O-joYQ1SFFoSVnOi-NPEgw859bGQuHqo796vH1Jy69IXQnc2z0VwlclWgUQSt63WY9iqkpVaXav4tsFkUMm4D7no_bugptleOrus1trrx4s3s-FrZWh4V41AD0Hf-U0NmXHrpf0gH-4qH8mj6sLHTBT7XLXueOopIrs-0TBDl16n3X195MRiO80IArHzUTftLtARmIgJB1fC2Bip3qSUY9qlWZQfaogNf6cXYUs5MdlkLNtjzv_mi925TWkfqXl7L1KCWG0Lp8dQJ50utSwmace_W4b6_0TUDxQb5G0LvA38DYCuuZ7T5qBI-OzhpHM4WUsuxIOxDtxarpTk1fh6Bj1LdLHznSS78boONU5I7txtxKx82WNmZsxIMi_ogfQOPDFGTld5TkimzVCAsedYm2X-G2xiqqPgKQ52qBvS_-90delzJgjOmHMazlDOrM87kZMPH6VXxKfDBXJ_JQKoMQ6b1NhlvQRNzLgLepbvXgHnV3Zu-Ia3ULEvxnKYUlVaXR71PlJLCjmAuYXcIpyQLnyGK0zP7qNTO71DVJqSwpViZEI8UZ81ae0eMAEzYcvVlkXEgnCnB1qjmgZYne1re2QT3dH5LMuHQJpmyvxN-NGJwvflrKQMi69Z15Wx3aEam1T1vBzfNiqXnN8Ob6Z0JqFyyIoMm6HDVojp_e4lRsGxrEaC56AYDL_XTNVomTpcYRQVqc-x6z9WvHCGVRHnzpAzh3ySJQGFgxV-YjC0r94-LtTW-6FR5aLtfCmr6W5qv2nRNAdqBdR-4L1SOuAGsezlFSuzo5_72OUGgtr_U3RanPi26tVbDxEl8kMm8ixDfYwlgNT_WGBW2FP3Jfv8uXSHF2JW9-teO_OUBotPZeLU6vyRAEj0rfgnd1WnvOKb6WWxd5egU3vBrPA5L8jCiEFGJ4OTLvANNout_PEbOmRCSft5dtEa6SCwzVaaIQX0lWVxH-OQ_8fBWZd640MNHYSfaU5iRSuYLp6W5TKx0uIe6V9eN2cMr8XZA59wFKgTRyBuC_mIq3F-AjS2FAr7CMNwv6RHllE.Hk82gAeokAc2KzKXNCFWog",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+ "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgwN30..okWKLHhP7jnumUnF.LJQARNuZhjYjT0MUu-tfTpZW079ocOJ861M7MBaeExLNDkUq4AWTjmRxIv3WO6EY0-8iT9wX5MLMB60DOk7MsZHyUWM9ypFRQOH4526yKa9SEeEBwWFY1YUeCER9g_VYG4DV0tLI_HvffB3oAAhBCOR77Xm04EXOxrpbejc297k20_-AC7nWJ_UnIAV2SAUsI5ykuOXiiVNSgjFeZaOVincskvM_GpMSCnbbBf9s9g4nAPnCW5bIi0ZO4rtXJk-e6rKUPxZiGEruKu-ChWLJLgVr7ymkCm9kz3-6bvqwfyMgTibWtXxX3Tfw94TkuUFgbLYzI6SSrGEddblTU4XgFXGYcH_SsgBWrLATt1xonZDM5fYex0K4eo3yzE70u7UZyqH6cgfIJtDEJdTDJ_g49x7qEVZNUkoVOtvbNGNVIfCiGFDkpcR5NDfftB5vaJ_8873BK_FKBDl_l7VVGYj2mYDUckPL7Jnk6ZxKD2CNofBmbY4Rqde37P7bn1In4cA0OpmC3zIOwLlnj83jOuuDU0BrJApndbzgkIHzi5Tc3WxDcnYYrTH9cBvY4qprtYl5VjkOtyWuF1L0mIhF-NT6LcY7CsLYHTE6qUgZZLMEMwpQIKhnnB-b386kAkxI1zJEiAbcUtekN4m5V8FZzYmyRpB3QT3EjVCZITuKEH-lFcw5QGgPQ1y8VgGdZZzAvrCvZLhdjGc51tDEKeIG93ded-TaYDM0XF6cnamogcWkLw2n4LkMQYbTQ1Ahzi14RiZ5jMQNq_Dw9MSbeO708oul7dfUQlumgpmOjk-jwAy_QVo3KsC46vHH1dfxA4tIqiFdKVDtqd1FZBbNnFlhj8evD8nDSuy_iWoeoIA8Kjm0OSzRfZXYrUpoRKB9C95-LAfrhb_z9VK2NXNQOL2ZxgkiAlTTfpmy6f98IHIG_z6qjhESFdVtEEWVwdDSgANKccxAqj6iynsXQ8HiuU4GL1q-hsPCOyUIzCYLtTUF4USHMAsOTfDfYGYq3yt68sKxjNLOpRJoo0jhpzttNDSqWLM2yaz24dufotdVROBl9TxzxDscm48twKrGY5ohuu3jumq0X0tD8TcUtL2x6Qlaa7HnfRILl6kdrX00Bo0xLgnNNSDKzu1Nw2tpTnkXfiVMYaPiYTlI4X2diYfyMV4mo5l2pdfdRofdrPaqEFPG_vQGKNFwpQkM2lBN31EypwByYrXGNpx51__Ox-kMzTdIx1emYGi9g7w-UGRuSNPyBcT3JlgNUnGXq4iRPCo.S0qbVPvEvmAA0xVxnePCiA"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+}

body.id_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390733
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiaFVFOV9sUlBlUFhBbDVZOE05QzlqZyIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoiVkR0VVNBM1BfR21TNHRMQ0pQb3c5MURpNHJDeVVjZmkiLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcxOTM5MDQyNCwiZXhwIjoxNzE5MzkwNzMzLCJpYXQiOjE3MTkzOTA0MzMsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiMTJiZTQyZjVmNTI5MzU3NyJ9.ElfqtzcQQ6mQ0i0R0fOVrXQVwtxL0hnKQauAeQNZ83GnTTY1c4a5X3DKLdg05iCEBt91BgLUOkwj0lRwcSd6gw"
Ein verschachtelt enthaltenes JWT
-}

body.id_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340807
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiUlhoR3hSTGZOaWNDYTFqdnFRSDdyUSIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoiN0pqcGhiaFBnS2FjWnNLRl9Qamtad3JQbW9HeGZJS0kiLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcyMjM0MDQ5OCwiZXhwIjoxNzIyMzQwODA3LCJpYXQiOjE3MjIzNDA1MDcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiOTJlYTJkNzY3MmU2Y2IyZCJ9.QjtscirtxdvTyxxgms0rTz103Ta0RHw2bl9LOYgr2kBWg7nV2cDTncxaPNCqG5H1tCrYIaNx5QY0Rb1My-tlkA"
Ein verschachtelt enthaltenes JWT
+}

body.id_token.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "at_hash" : "hUE9_lRPePXAl5Y8M9C9jg",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
+}

Body

{
+  "at_hash" : "RXhGxRLfNicCa1jvqQH7rQ",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
"sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"organizationName" : "Test GKV-SVNOT-VALID", "professionOID" : "1.2.276.0.76.4.49", @@ -836,27 +836,27 @@ "iss" : "https://idp.dev.gematik.solutions", "given_name" : "Darius Michael Brian Ubbo", "display_name" : "Darius Michael Brian Ubbo Bödefeld", - "nonce" : "VDtUSA3P_GmS4tLCJPow91Di4rCyUcfi",
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.
+ "nonce" : "7JjphbhPgKacZsKF_PjkZwrPmoGxfIKI",
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.
"aud" : "eRezeptApp", "acr" : "gematik-ehealth-loa-high", "azp" : "eRezeptApp", - "auth_time" : 1719390424,
Timestamp der Authentisierung
- "exp" : 1719390733,
Gültigkeit des Tokens
- "iat" : 1719390433,
Zeitpunkt der Ausstellung des Tokens
+ "auth_time" : 1722340498,
Timestamp der Authentisierung
+ "exp" : 1722340807,
Gültigkeit des Tokens
+ "iat" : 1722340507,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld", - "jti" : "12be42f5f5293577"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
+  "jti" : "92ea2d7672e6cb2d"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390733
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTcxOTM5MDQyNCwiZXhwIjoxNzE5MzkwNzMzLCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQzMywianRpIjoiZDVmZjg2M2RlMTZhYzAyNiJ9.lk-HpPC5caExk3uEVxUA0E8utcPxHLU3rROABpyCN-5WRYen7eIWM84mpT228JcIazw4sz5ZG0usmHNwoYkw4A"
Ein verschachtelt enthaltenes JWT
-}

body.access_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340807
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTcyMjM0MDQ5OCwiZXhwIjoxNzIyMzQwODA3LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDUwNywianRpIjoiNDU0MGEwOWY3Y2E5YTBiYiJ9.V3C1EjObk36ou-TU7H-jF-qAzly_EJh5TMD0pJDiUGI1KMqFhuAL0eYDtrlFLQ2zvDGRtvrMPckTOAtbxehwyQ"
Ein verschachtelt enthaltenes JWT
+}

body.access_token.content.body.njwt.content

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "at+JWT",
   "kid" : "puk_idp_sig"
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
-}

Body

{
+}

Body

{
   "sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"professionOID" : "1.2.276.0.76.4.49", "organizationName" : "Test GKV-SVNOT-VALID", @@ -869,13 +869,13 @@ "acr" : "gematik-ehealth-loa-high", "aud" : "https://erp-test.zentral.erp.splitdns.ti-dienste.de/", "azp" : "eRezeptApp", - "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" : 1719390424,
Timestamp der Authentisierung
- "exp" : 1719390733,
Gültigkeit des Tokens
+ "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" : 1722340498,
Timestamp der Authentisierung
+ "exp" : 1722340807,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390433,
Zeitpunkt der Ausstellung des Tokens
- "jti" : "d5ff863de16ac026"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

Created Wed, 26 Jun 2024 10:27:16 +0200
\ No newline at end of file + \ No newline at end of file diff --git a/doc/tokenFlowPs.html b/doc/tokenFlowPs.html index e049b34..53e3fcc 100644 --- a/doc/tokenFlowPs.html +++ b/doc/tokenFlowPs.html @@ -454,55 +454,55 @@ color: #0fc5d9!important; }
Gerendert mit https://github.com/gematik/app-RbelLogger
Created Wed, 26 Jun 2024 10:28:01 +0200
Created Tue, 30 Jul 2024 13:55:56 +0200

31 GET http://localhost:43371/.well-known/openid-configuration127.0.0.1:-1localhost:46681

31 GET http://localhost:35601/.well-known/openid-configuration127.0.0.1:-1localhost:33895

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:46681
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:33895
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

32200localhost:46681127.0.0.1:-1

32200localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
3118
Date
Wed, 26 Jun 2024 08:27:45 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
+Date: Tue, 30 Jul 2024 11:55:41 GMT
+Content-Type: application/jwt;charset=UTF-8

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
3118
Date
Tue, 30 Jul 2024 11:55:41 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "JWT",
   "kid" : "puk_disc_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"x5c" : [ "MIICsTCCAligAwIBAgIHAbssqQhqOzAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMTAxMTUwMDAwMDBaFw0yNjAxMTUyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAzMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIYZnwiGAn5QYOx43Z8MwaZLD3r/bz6BTcQO5pbeum6qQzYD5dDCcriw/VNPPZCQzXQPg4StWyy5OOq9TogBEmOjge0wgeowDgYDVR0PAQH/BAQDAgeAMC0GBSskCAMDBCQwIjAgMB4wHDAaMAwMCklEUC1EaWVuc3QwCgYIKoIUAEwEggQwIQYDVR0gBBowGDAKBggqghQATASBSzAKBggqghQATASBIzAfBgNVHSMEGDAWgBQo8Pjmqch3zENF25qu1zqDrA4PqDA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wHQYDVR0OBBYEFC94M9LgW44lNgoAbkPaomnLjS8/MAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDRwAwRAIgCg4yZDWmyBirgxzawz/S8DJnRFKtYU/YGNlRc7+kBHcCIBuzba3GspqSmoP1VwMeNNKNaLsgV8vMbDJb30aqaiX1"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
] -}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
-  "authorization_endpoint" : "http://localhost:43371/sign_response",
URL des Authorization Endpunkts.
- "auth_pair_endpoint" : "http://localhost:43371/alt_response",
URL des Biometrie-Authorization Endpunkts.
- "sso_endpoint" : "http://localhost:43371/sso_response",
URL des SSO-Authorization Endpunkts.
- "uri_pair" : "http://localhost:43371/pairings",
URL des Pairing-Endpunkts
- "token_endpoint" : "http://localhost:43371/token",
URL des Authorization Endpunkts.
- "third_party_authorization_endpoint" : "http://localhost:43371/extauth", +}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
+  "authorization_endpoint" : "http://localhost:35601/sign_response",
URL des Authorization Endpunkts.
+ "auth_pair_endpoint" : "http://localhost:35601/alt_response",
URL des Biometrie-Authorization Endpunkts.
+ "sso_endpoint" : "http://localhost:35601/sso_response",
URL des SSO-Authorization Endpunkts.
+ "uri_pair" : "http://localhost:35601/pairings",
URL des Pairing-Endpunkts
+ "token_endpoint" : "http://localhost:35601/token",
URL des Authorization Endpunkts.
+ "third_party_authorization_endpoint" : "http://localhost:35601/extauth", "federation_authorization_endpoint" : "https://idpfadi.dev.gematik.solutions/auth", - "uri_disc" : "http://localhost:43371/.well-known/openid-configuration",
URL des Discovery-Dokuments
+ "uri_disc" : "http://localhost:35601/.well-known/openid-configuration",
URL des Discovery-Dokuments
"issuer" : "https://idp.dev.gematik.solutions", - "jwks_uri" : "http://localhost:43371/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
- "exp" : 1719476865,
Gültigkeit des Tokens
- "iat" : 1719390465,
Zeitpunkt der Ausstellung des Tokens
- "uri_puk_idp_enc" : "http://localhost:43371/idpEnc/jwk.json", - "uri_puk_idp_sig" : "http://localhost:43371/idpSig/jwk.json", + "jwks_uri" : "http://localhost:35601/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
+ "exp" : 1722426941,
Gültigkeit des Tokens
+ "iat" : 1722340541,
Zeitpunkt der Ausstellung des Tokens
+ "uri_puk_idp_enc" : "http://localhost:35601/idpEnc/jwk.json", + "uri_puk_idp_sig" : "http://localhost:35601/idpSig/jwk.json", "subject_types_supported" : [ "pairwise" ], "id_token_signing_alg_values_supported" : [ "BP256R1" ], "response_types_supported" : [ "code" ], @@ -512,23 +512,23 @@ "acr_values_supported" : [ "gematik-ehealth-loa-high" ], "token_endpoint_auth_methods_supported" : [ "none" ], "code_challenge_methods_supported" : [ "S256" ], - "kk_app_list_uri" : "http://localhost:43371/directory/kk_apps", - "fed_idp_list_uri" : "http://localhost:43371/fed_idp_list" -}

Signature

Was verified using Key puk_disc_sig

Signature

Was verified using Key puk_disc_sig

33 GET http://localhost:43371/idpSig/jwk.json127.0.0.1:-1localhost:46681

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

33 GET http://localhost:35601/idpSig/jwk.json127.0.0.1:-1localhost:33895

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

34200localhost:46681127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:27:49 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"x5c":["MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"],"use":"sig","kid":"puk_idp_sig","kty":"EC","crv":"BP-256","x":"llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk","y":"ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"}

34200localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:55:44 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "x5c" : [ "MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "use" : "sig",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
@@ -536,49 +536,49 @@ "crv" : "BP-256", "x" : "llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

body.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 1

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 1034953504625805

Valid From: 2020-08-04T00:00Z[UTC]

Valid Until: 2025-08-04T23:59:59Z[UTC]


35 GET http://localhost:43371/idpEnc/jwk.json127.0.0.1:-1localhost:46681

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

35 GET http://localhost:35601/idpEnc/jwk.json127.0.0.1:-1localhost:33895

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

36200localhost:46681127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:27:51 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"use":"enc","kid":"puk_idp_enc","kty":"EC","crv":"BP-256","x":"QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w","y":"mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"}

36200localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:55:47 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "use" : "enc",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_enc",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"kty" : "EC", "crv" : "BP-256", "x" : "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

37 GET http://localhost:43371/sign_response?client_id=gematikTestPs&response_type=code&redirect_uri=http%3A%2F%2Ftest-ps.gematik.de%2Ferezept&state=dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU&code_challenge=gxhfnvYcUkKfdCE89doGts5zzKuNGKtyXy-i0XvSNQU&code_challenge_method=S256&scope=openid+e-rezept&nonce=opAQH1KzHIH0pD65BLNItNDD19YSGQy4127.0.0.1:-1localhost:46681

37 GET http://localhost:35601/sign_response?client_id=gematikTestPs&response_type=code&redirect_uri=http%3A%2F%2Ftest-ps.gematik.de%2Ferezept&state=MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z&code_challenge=fyg0b9w0XhApaofqeJYBoUbimGw2SxWXD8GDPfqqjWU&code_challenge_method=S256&scope=e-rezept+openid&nonce=WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz127.0.0.1:-1localhost:33895

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

38200localhost:46681127.0.0.1:-1

38200localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:51 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
-  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ2NjgxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJsUHUzNFZSM2xPc3dwOHlYalhPOTc1b2VwWjNsWVBQanNsaUxEckVQb2E0IiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6Im9wQVFIMUt6SElIMHBENjVCTE5JdE5ERDE5WVNHUXk0IiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJkWm9XM1VrTERFRGYzdDB5bWp1SmsyUk95dm9fSzdhVSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsImV4cCI6MTcxOTM5MDY1MSwiaWF0IjoxNzE5MzkwNDcxLCJjb2RlX2NoYWxsZW5nZSI6Imd4aGZudlljVWtLZmRDRTg5ZG9HdHM1enpLdU5HS3R5WHktaTBYdlNOUVUiLCJqdGkiOiJkMDlkZWI5ODQzZDMwOTQyIn0.OSkB4Y8glGxAWjzX1_3C44VF_QpRnhfb1I6FN2FomLNsC9LVNl3EvGopNDbCpfwS5i2566HejxL8iJ7Kc0bsjg",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
+Date: Tue, 30 Jul 2024 11:55:47 GMT +Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:47 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMzODk1IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJnNW9KMm5Qc1FuZnJNRjRWYkV0UEI5MWR5REFScktzemJaY094dWZvYmVvIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IldPaTRXQy0yelB5ZkZhU05wSFdWb2xNbXk2SThyUHB6IiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJNZHBjVDl0NjJBTFJqZE40UU5jZDVCc29KOVlkOW8zeiIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsImV4cCI6MTcyMjM0MDcyNywiaWF0IjoxNzIyMzQwNTQ3LCJjb2RlX2NoYWxsZW5nZSI6ImZ5ZzBiOXcwWGhBcGFvZnFlSllCb1ViaW1HdzJTeFdYRDhHRFBmcXFqV1UiLCJqdGkiOiIyN2FhY2I3MmU0MWRjYTU1In0.H-AF3qxa4DpwCcpXWLadY5oX2BXDgHwLxsbJA_0zsSQ_ylXiC_0TW7CzH7wqJXEDOG0vP9QfOIORvg8em4I78g",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
"user_consent" : { "requested_scopes" : { "e-rezept" : "Zugriff auf die E-Rezept-Funktionalität.", @@ -593,211 +593,211 @@ "family_name" : "Zustimmung zur Verarbeitung des Nachnamens" } } -}

body.challenge.content

JWT

Headers
{
+}

body.challenge.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:46681",
+}

Body

{
+  "iss" : "http://localhost:33895",
   "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" : "lPu34VR3lOswp8yXjXO975oepZ3lYPPjsliLDrEPoa4",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "g5oJ2nPsQnfrMF4VbEtPB91dyDARrKszbZcOxufobeo",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "opAQH1KzHIH0pD65BLNItNDD19YSGQy4",
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.
+ "nonce" : "WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz",
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" : "gematikTestPs",
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.
- "state" : "dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"redirect_uri" : "http://test-ps.gematik.de/erezept",
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
- "exp" : 1719390651,
Gültigkeit des Tokens
- "iat" : 1719390471,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "gxhfnvYcUkKfdCE89doGts5zzKuNGKtyXy-i0XvSNQU",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "d09deb9843d30942"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key puk_idp_sig

39 POST http://localhost:43371/sign_response127.0.0.1:-1localhost:46681

39 POST http://localhost:35601/sign_response127.0.0.1:-1localhost:33895

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
4013

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
+content-length: 4013

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
4013

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
   "alg" : "ECDH-ES",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390651,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
+ "exp" : 1722340727,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
"epk" : { "kty" : "EC", - "x" : "j7YaX8qd6tcSJnr-8pM3U24bmJczyQDvYO9QcONEy14",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "oBT6IkOtfAXYI6rRQmPLb_KnXT2xVD6jr8xS8-1skBo",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "ZbjlmgzrU6LYErfLFr5B1k3NfaPgpLvU2SFq3VJjphg",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "Mfrzu6PPODMdRi0xqRSBpSKdUE4knEU5Gvxt6aJfN0c",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body

{
-  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURWekNDQXY2Z0F3SUJBZ0lIQUlvMS92bkxtREFLQmdncWhrak9QUVFEQWpDQmlURUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhPREEyQmdOVkJBc01MMGhsYVd4aVpYSjFabk5oZFhOM1pXbHpMVU5CSUdSbGNpQlVaV3hsYldGMGFXdHBibVp5WVhOMGNuVnJkSFZ5TVI4d0hRWURWUVFEREJaSFJVMHVTRUpCTFVOQk1UTWdWRVZUVkMxUFRreFpNQjRYRFRJd01EWXhNREF3TURBd01Gb1hEVEkxTURZd09USXpOVGsxT1Zvd2NERUxNQWtHQTFVRUJoTUNSRVV4WVRBTUJnTlZCQVFNQlU5MHc2MXpNQlFHQTFVRUtnd05SOE84Ym5Sb1pYSWdSM0poWmpBYkJnTlZCQVVURkRnd01qYzJPRGd6TVRFd01EQXdNVEk1TURnME1CNEdBMVVFQXd3WFI4TzhiblJvWlhJZ1QzVERyWE5VUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFVS84bVlMM3lsQS9USnNWSHhhYXhqaHpZUG9keGJxR2VqelhibHBaMzYrMEJ2TDZkLzlLSWVva3plc3JLRTBnNjZhTDBXK3Nwc3FwWFNUYVlQQnFMMDZPQ0FXWXdnZ0ZpTUF3R0ExVWRFd0VCL3dRQ01BQXdEZ1lEVlIwUEFRSC9CQVFEQWdPSU1CMEdBMVVkRGdRV0JCU1kzMFRwZjBYY2pvdFdTOVBYVXY5RERENnBrVEE0QmdnckJnRUZCUWNCQVFRc01Db3dLQVlJS3dZQkJRVUhNQUdHSEdoMGRIQTZMeTlsYUdOaExtZGxiV0YwYVdzdVpHVXZiMk56Y0M4d0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUVNQzRHQTFVZElBUW5NQ1V3Q1FZSEtvSVVBRXdFU3pBTUJnb3JCZ0VFQVlMTk13RUJNQW9HQ0NxQ0ZBQk1CSUVSTUI4R0ExVWRJd1FZTUJhQUZBcjdETlhVazFROVpZQStlaUFDbFRTV2dCdkFNSGtHQlNza0NBTURCSEF3YnFRb01DWXhDekFKQmdOVkJBWVRBa1JGTVJjd0ZRWURWUVFLREE1blpXMWhkR2xySUVKbGNteHBiakJDTUVBd1BqQThNQTRNRE1PRWNucDBhVzR2UVhKNmREQUpCZ2NxZ2hRQVRBUWVFeDh4TFVoQ1FTMVVaWE4wYTJGeWRHVXRPRGd6TVRFd01EQXdNVEk1TURnME1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lFT2xHd3VmRjJIWjJuWkF3Qm41cXJXeVNKMWpXSVNVcjBmZUFiZjBNNUxyQWlCRyt2T2lhR2wyYUZQd0Y5UXp4a0ZOZTAvb2QxdVEzbEdVL2sxVWtGdTFQdz09Il0sImFsZyI6IkJQMjU2UjEifQ.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pRMk5qZ3hJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKc1VIVXpORlpTTTJ4UGMzZHdPSGxZYWxoUE9UYzFiMlZ3V2pOc1dWQlFhbk5zYVV4RWNrVlFiMkUwSWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNkltOXdRVkZJTVV0NlNFbElNSEJFTmpWQ1RFNUpkRTVFUkRFNVdWTkhVWGswSWl3aVkyeHBaVzUwWDJsa0lqb2laMlZ0WVhScGExUmxjM1JRY3lJc0luTmpiM0JsSWpvaWIzQmxibWxrSUdVdGNtVjZaWEIwSWl3aWMzUmhkR1VpT2lKa1dtOVhNMVZyVEVSRlJHWXpkREI1YldwMVNtc3lVazk1ZG05ZlN6ZGhWU0lzSW5KbFpHbHlaV04wWDNWeWFTSTZJbWgwZEhBNkx5OTBaWE4wTFhCekxtZGxiV0YwYVdzdVpHVXZaWEpsZW1Wd2RDSXNJbVY0Y0NJNk1UY3hPVE01TURZMU1Td2lhV0YwSWpveE56RTVNemt3TkRjeExDSmpiMlJsWDJOb1lXeHNaVzVuWlNJNkltZDRhR1p1ZGxsalZXdExabVJEUlRnNVpHOUhkSE0xZW5wTGRVNUhTM1I1V0hrdGFUQllkbE5PVVZVaUxDSnFkR2tpT2lKa01EbGtaV0k1T0RRelpETXdPVFF5SW4wLk9Ta0I0WThnbEd4QVdqelgxXzNDNDRWRl9RcFJuaGZiMUk2Rk4yRm9tTE5zQzlMVk5sM0V2R29wTkRiQ3Bmd1M1aTI1NjZIZWp4TDhpSjdLYzBic2pnIn0.WqPcQdXxsYd2r-HG4a45exOnuSM_eTnAFwGC5VJtWD5KaYmDnpJLIX9BAK6eoW09fZkxsQFhhgsof0LJYVDjow"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content

JWT

Headers
{
+}

Body

{
+  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURWekNDQXY2Z0F3SUJBZ0lIQUlvMS92bkxtREFLQmdncWhrak9QUVFEQWpDQmlURUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhPREEyQmdOVkJBc01MMGhsYVd4aVpYSjFabk5oZFhOM1pXbHpMVU5CSUdSbGNpQlVaV3hsYldGMGFXdHBibVp5WVhOMGNuVnJkSFZ5TVI4d0hRWURWUVFEREJaSFJVMHVTRUpCTFVOQk1UTWdWRVZUVkMxUFRreFpNQjRYRFRJd01EWXhNREF3TURBd01Gb1hEVEkxTURZd09USXpOVGsxT1Zvd2NERUxNQWtHQTFVRUJoTUNSRVV4WVRBTUJnTlZCQVFNQlU5MHc2MXpNQlFHQTFVRUtnd05SOE84Ym5Sb1pYSWdSM0poWmpBYkJnTlZCQVVURkRnd01qYzJPRGd6TVRFd01EQXdNVEk1TURnME1CNEdBMVVFQXd3WFI4TzhiblJvWlhJZ1QzVERyWE5VUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFVS84bVlMM3lsQS9USnNWSHhhYXhqaHpZUG9keGJxR2VqelhibHBaMzYrMEJ2TDZkLzlLSWVva3plc3JLRTBnNjZhTDBXK3Nwc3FwWFNUYVlQQnFMMDZPQ0FXWXdnZ0ZpTUF3R0ExVWRFd0VCL3dRQ01BQXdEZ1lEVlIwUEFRSC9CQVFEQWdPSU1CMEdBMVVkRGdRV0JCU1kzMFRwZjBYY2pvdFdTOVBYVXY5RERENnBrVEE0QmdnckJnRUZCUWNCQVFRc01Db3dLQVlJS3dZQkJRVUhNQUdHSEdoMGRIQTZMeTlsYUdOaExtZGxiV0YwYVdzdVpHVXZiMk56Y0M4d0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUVNQzRHQTFVZElBUW5NQ1V3Q1FZSEtvSVVBRXdFU3pBTUJnb3JCZ0VFQVlMTk13RUJNQW9HQ0NxQ0ZBQk1CSUVSTUI4R0ExVWRJd1FZTUJhQUZBcjdETlhVazFROVpZQStlaUFDbFRTV2dCdkFNSGtHQlNza0NBTURCSEF3YnFRb01DWXhDekFKQmdOVkJBWVRBa1JGTVJjd0ZRWURWUVFLREE1blpXMWhkR2xySUVKbGNteHBiakJDTUVBd1BqQThNQTRNRE1PRWNucDBhVzR2UVhKNmREQUpCZ2NxZ2hRQVRBUWVFeDh4TFVoQ1FTMVVaWE4wYTJGeWRHVXRPRGd6TVRFd01EQXdNVEk1TURnME1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lFT2xHd3VmRjJIWjJuWkF3Qm41cXJXeVNKMWpXSVNVcjBmZUFiZjBNNUxyQWlCRyt2T2lhR2wyYUZQd0Y5UXp4a0ZOZTAvb2QxdVEzbEdVL2sxVWtGdTFQdz09Il0sImFsZyI6IkJQMjU2UjEifQ.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pNek9EazFJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKbk5XOUtNbTVRYzFGdVpuSk5SalJXWWtWMFVFSTVNV1I1UkVGU2NrdHplbUphWTA5NGRXWnZZbVZ2SWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNklsZFBhVFJYUXkweWVsQjVaa1poVTA1d1NGZFdiMnhOYlhrMlNUaHlVSEI2SWl3aVkyeHBaVzUwWDJsa0lqb2laMlZ0WVhScGExUmxjM1JRY3lJc0luTmpiM0JsSWpvaVpTMXlaWHBsY0hRZ2IzQmxibWxrSWl3aWMzUmhkR1VpT2lKTlpIQmpWRGwwTmpKQlRGSnFaRTQwVVU1alpEVkNjMjlLT1Zsa09XOHplaUlzSW5KbFpHbHlaV04wWDNWeWFTSTZJbWgwZEhBNkx5OTBaWE4wTFhCekxtZGxiV0YwYVdzdVpHVXZaWEpsZW1Wd2RDSXNJbVY0Y0NJNk1UY3lNak0wTURjeU55d2lhV0YwSWpveE56SXlNelF3TlRRM0xDSmpiMlJsWDJOb1lXeHNaVzVuWlNJNkltWjVaekJpT1hjd1dHaEJjR0Z2Wm5GbFNsbENiMVZpYVcxSGR6SlRlRmRZUkRoSFJGQm1jWEZxVjFVaUxDSnFkR2tpT2lJeU4yRmhZMkkzTW1VME1XUmpZVFUxSW4wLkgtQUYzcXhhNERwd0NjcFhXTGFkWTVvWDJCWERnSHdMeHNiSkFfMHpzU1FfeWxYaUNfMFRXN0N6SDd3cUpYRURPRzB2UDlRZk9JT1J2ZzhlbTRJNzhnIn0.ILYfjY7FY9hTf8yIXO-KFM6mc7FUezaU1OyLA2zODXuJWNo7sPydqF4Rk59yAJzwsyi_Y640nnFTo_d5WEcLzA"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content

JWT

Headers
{
   "typ" : "JWT",
   "cty" : "NJWT",
   "x5c" : [ "MIIDVzCCAv6gAwIBAgIHAIo1/vnLmDAKBggqhkjOPQQDAjCBiTELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxODA2BgNVBAsML0hlaWxiZXJ1ZnNhdXN3ZWlzLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMR8wHQYDVQQDDBZHRU0uSEJBLUNBMTMgVEVTVC1PTkxZMB4XDTIwMDYxMDAwMDAwMFoXDTI1MDYwOTIzNTk1OVowcDELMAkGA1UEBhMCREUxYTAMBgNVBAQMBU90w61zMBQGA1UEKgwNR8O8bnRoZXIgR3JhZjAbBgNVBAUTFDgwMjc2ODgzMTEwMDAwMTI5MDg0MB4GA1UEAwwXR8O8bnRoZXIgT3TDrXNURVNULU9OTFkwWjAUBgcqhkjOPQIBBgkrJAMDAggBAQcDQgAEU/8mYL3ylA/TJsVHxaaxjhzYPodxbqGejzXblpZ36+0BvL6d/9KIeokzesrKE0g66aL0W+spsqpXSTaYPBqL06OCAWYwggFiMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgOIMB0GA1UdDgQWBBSY30Tpf0XcjotWS9PXUv9DDD6pkTA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMC4GA1UdIAQnMCUwCQYHKoIUAEwESzAMBgorBgEEAYLNMwEBMAoGCCqCFABMBIERMB8GA1UdIwQYMBaAFAr7DNXUk1Q9ZYA+eiAClTSWgBvAMHkGBSskCAMDBHAwbqQoMCYxCzAJBgNVBAYTAkRFMRcwFQYDVQQKDA5nZW1hdGlrIEJlcmxpbjBCMEAwPjA8MA4MDMOEcnp0aW4vQXJ6dDAJBgcqghQATAQeEx8xLUhCQS1UZXN0a2FydGUtODgzMTEwMDAwMTI5MDg0MAoGCCqGSM49BAMCA0cAMEQCIEOlGwufF2HZ2nZAwBn5qrWySJ1jWISUr0feAbf0M5LrAiBG+vOiaGl2aFPwF9QzxkFNe0/od1uQ3lGU/k1UkFu1Pw=="
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "alg" : "BP256R1" -}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,SURNAME=Otís+GIVENNAME=Günther Graf+SERIALNUMBER=80276883110000129084+CN=Günther OtísTEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Heilberufsausweis-CA der Telematikinfrastruktur,CN=GEM.HBA-CA13 TEST-ONLY

Serialnumber: 151964515683224

Valid From: 2020-06-10T00:00Z[UTC]

Valid Until: 2025-06-09T23:59:59Z[UTC]


Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ2NjgxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJsUHUzNFZSM2xPc3dwOHlYalhPOTc1b2VwWjNsWVBQanNsaUxEckVQb2E0IiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6Im9wQVFIMUt6SElIMHBENjVCTE5JdE5ERDE5WVNHUXk0IiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJkWm9XM1VrTERFRGYzdDB5bWp1SmsyUk95dm9fSzdhVSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsImV4cCI6MTcxOTM5MDY1MSwiaWF0IjoxNzE5MzkwNDcxLCJjb2RlX2NoYWxsZW5nZSI6Imd4aGZudlljVWtLZmRDRTg5ZG9HdHM1enpLdU5HS3R5WHktaTBYdlNOUVUiLCJqdGkiOiJkMDlkZWI5ODQzZDMwOTQyIn0.OSkB4Y8glGxAWjzX1_3C44VF_QpRnhfb1I6FN2FomLNsC9LVNl3EvGopNDbCpfwS5i2566HejxL8iJ7Kc0bsjg"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
+}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,SURNAME=Otís+GIVENNAME=Günther Graf+SERIALNUMBER=80276883110000129084+CN=Günther OtísTEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Heilberufsausweis-CA der Telematikinfrastruktur,CN=GEM.HBA-CA13 TEST-ONLY

Serialnumber: 151964515683224

Valid From: 2020-06-10T00:00Z[UTC]

Valid Until: 2025-06-09T23:59:59Z[UTC]


Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjMzODk1IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJnNW9KMm5Qc1FuZnJNRjRWYkV0UEI5MWR5REFScktzemJaY094dWZvYmVvIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IldPaTRXQy0yelB5ZkZhU05wSFdWb2xNbXk2SThyUHB6IiwiY2xpZW50X2lkIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJNZHBjVDl0NjJBTFJqZE40UU5jZDVCc29KOVlkOW8zeiIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsImV4cCI6MTcyMjM0MDcyNywiaWF0IjoxNzIyMzQwNTQ3LCJjb2RlX2NoYWxsZW5nZSI6ImZ5ZzBiOXcwWGhBcGFvZnFlSllCb1ViaW1HdzJTeFdYRDhHRFBmcXFqV1UiLCJqdGkiOiIyN2FhY2I3MmU0MWRjYTU1In0.H-AF3qxa4DpwCcpXWLadY5oX2BXDgHwLxsbJA_0zsSQ_ylXiC_0TW7CzH7wqJXEDOG0vP9QfOIORvg8em4I78g"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:46681",
+}

Body

{
+  "iss" : "http://localhost:33895",
   "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" : "lPu34VR3lOswp8yXjXO975oepZ3lYPPjsliLDrEPoa4",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "g5oJ2nPsQnfrMF4VbEtPB91dyDARrKszbZcOxufobeo",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "opAQH1KzHIH0pD65BLNItNDD19YSGQy4",
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.
+ "nonce" : "WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz",
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" : "gematikTestPs",
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.
- "state" : "dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"redirect_uri" : "http://test-ps.gematik.de/erezept",
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
- "exp" : 1719390651,
Gültigkeit des Tokens
- "iat" : 1719390471,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "gxhfnvYcUkKfdCE89doGts5zzKuNGKtyXy-i0XvSNQU",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "d09deb9843d30942"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key x5c-header certificate

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key x5c-header certificate

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

40302localhost:46681127.0.0.1:-1

40302localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
0
Date
Wed, 26 Jun 2024 08:27:53 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://test-ps.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&state=dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
+Date: Tue, 30 Jul 2024 11:55:48 GMT
+Location: http://test-ps.gematik.de/erezept?code=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDYwOH0..8ZRB1qLCG4u9q208.1rEs4P-kMNOuYdSVF-D6DDECW7IBgEZEZLIywEnJ6RNDDYiSlri5hakN_evv0ZVU3g0EE_nmXFAQippdhCJlvPFFAs9fffmTBGzcOt68rUIR5orDRY1l8KTm_8bjtkFGqQ3RnGQ97aGdY1Ij3dnTTekA5A47y-l4g4Rio5H9cxfBMlcRrUlMa8wZJj8q4_C3FqDPvW2QYltUelACQDoyog9gtOWpSiP_Yl2Mwnh_jYHApYMgQ7FBDIXnnQr39ShpP3Gsx8ApTyvfpyPrUEMkTTsa1LdngiTUN_6_ZX6mjJ8umxrJUyoUqvlhLOd35aWbTEneXOMavk11njMKvIfmKVfl-ICf5_h-9Pms-0wKFyFO9tiHmKonn1VW-mB1cjIfDEBq5-qom0jFnHK0vZuiBaNkpfHjVEdA3--wG5uKNLtMpjep1vLFEsa7Kd2-CkbQMcUxFZ7nKL40ARHA_EL0yGzllDB2AEMITNEwetfip0I7ic0Ls14OwETT5MWpMaHMpJRdCHAnjqWw4Ol-B2A-mbNl-BKnQ5NtLY4ax5MoxfZj-wDYzBg05LyKHd8zjHOeXkIIgvnYnHeFt16uu2oBxqafT-tG9XMtvzPF-gg3GyxQf_IYovt0ZghgtEWo-okVtJJyvMKriejf4mpk-TGA2m3sFOf4sL2Mh7C-8jpC0C38fi0QLz50US8DqNHbr8uOAUdZ0zB3-TYBahYh2H-YJ9aXhQ_Onzn07eYvEWRDRRxIPCrS5r_xVIP1FoCnIA9vlyUju8gPpgaJ8bK3O6lLFhmQUMTg-5nGthytHRuom35hkxKRiGCYQaHqi2GKiD0TgdAmvGnhnGloM21eIc4Z8bavTySETAUREQvDxghVGuXvt_xghAtjsZLbgF7Zfm2Xgyw8oNPjJlkisuwfhjgvWKYpRSA3Yv9oBLVKZVD6oY8ZK594VPrBCRPOnR5BrKETEDc5Mp-YVjoH3oEt8lFtSPpEPwuOERHfwki-7jY6LqV3WAjaWerD0MJrhiA1jjROJWKF0XC6ri1NB72ty9nC9tKwyI9pnUlnjTSGlWsgnT0fb6h5DH9UmorUE9UL4Lx_IjPcosjpY9glkLoczouRJ8kGlFOWH3qWy7c0KWlUvElr1eGkngdzachOdE61uAUpRj2KBw8mYDIe07nOBjAwE0VqG0sEhQocgsIxfHoAFXVB8rlPXJiUUzXlslpWWXP-3jJAMcPHlgIpY235oeFjCFH_cBLb-ZIV8t4WACo6webfe7YTPVMJRMnrCRkqzQIJR1fy0mERycbJnOHwzdnRjFxpiQVo5X_RqRgGa43hVCKOf0Nuolr71zmrNbR-FkX4h3wY1i1VcQdUE53sEIq9VtCSZjojHtnVBIlNuq9FolaH_OK0RJHZ_SGHTw.m5g8IXUj3lHi5_sVwTpdjA&state=MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
0
Date
Tue, 30 Jul 2024 11:55:48 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://test-ps.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&state=MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390533
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NjY4MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiVzRsbmZ3SzRMR2ltY3pQbXk4b0FqTEpZbTBKOFUzYUYiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoib3BBUUgxS3pISUgwcEQ2NUJMTkl0TkREMTlZU0dReTQiLCJjbGllbnRfaWQiOiJnZW1hdGlrVGVzdFBzIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NzMsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZFpvVzNVa0xERURmM3QweW1qdUprMlJPeXZvX0s3YVUiLCJleHAiOjE3MTkzOTA1MzMsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MTkzOTA0NzMsImNvZGVfY2hhbGxlbmdlIjoiZ3hoZm52WWNVa0tmZENFODlkb0d0czV6ekt1TkdLdHlYeS1pMFh2U05RVSIsImp0aSI6IjkzOGQzNzFkODc3NGE4N2YifQ.SVFxc3BmOh6AWbPNn_maDqY4OEXCNIXGzNHwIbc5NMYMZ-UyWugbLmdRJAfcgkdwNqJSO6wWCk-mUNDm4s9rJw"
Ein verschachtelt enthaltenes JWT
-}

header.Location.code.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340608
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzg5NSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiWGctaG96dzRjcW5WMzQ4cmw3a1BYb0NtQWtjRkY1alAiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiV09pNFdDLTJ6UHlmRmFTTnBIV1ZvbE1teTZJOHJQcHoiLCJjbGllbnRfaWQiOiJnZW1hdGlrVGVzdFBzIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA1NDgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiTWRwY1Q5dDYyQUxSamRONFFOY2Q1QnNvSjlZZDlvM3oiLCJleHAiOjE3MjIzNDA2MDgsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MjIzNDA1NDgsImNvZGVfY2hhbGxlbmdlIjoiZnlnMGI5dzBYaEFwYW9mcWVKWUJvVWJpbUd3MlN4V1hEOEdEUGZxcWpXVSIsImp0aSI6ImI1ZWEyNmM1NmU3ZDZjOGUifQ.RzKvzWkCHrQVvaVlBujQEG2CRFHXDfD4qRJYO-tc5Nk2fgEip-2g0gUhbJXQVhqt_2edhgUgyKqU_yrcHZKp-g"
Ein verschachtelt enthaltenes JWT
+}

header.Location.code.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : null,
   "professionOID" : "1.2.276.0.76.4.30",
   "idNummer" : "1-HBA-Testkarte-883110000129084",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:46681",
+  "iss" : "http://localhost:33895",
   "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" : "W4lnfwK4LGimczPmy8oAjLJYm0J8U3aF",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "Xg-hozw4cqnV348rl7kPXoCmAkcFF5jP",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "Günther Graf", "token_type" : "code", - "nonce" : "opAQH1KzHIH0pD65BLNItNDD19YSGQy4",
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.
+ "nonce" : "WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz",
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" : "gematikTestPs",
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" : 1719390473,
Timestamp der Authentisierung
+ "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" : 1722340548,
Timestamp der Authentisierung
"redirect_uri" : "http://test-ps.gematik.de/erezept",
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
- "state" : "dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390533,
Gültigkeit des Tokens
+ "state" : "MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340608,
Gültigkeit des Tokens
"family_name" : "Otís", - "iat" : 1719390473,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "gxhfnvYcUkKfdCE89doGts5zzKuNGKtyXy-i0XvSNQU",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "938d371d8774a87f"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

41 POST http://localhost:43371/token127.0.0.1:-1localhost:46681

41 POST http://localhost:35601/token127.0.0.1:-1localhost:33895

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2095

REQ Body

namevalue
client_id
gematikTestPs
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde

Headers
{
+content-length: 2095

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2095

REQ Body

namevalue
client_id
gematikTestPs
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

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" : 1719390533
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NjY4MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiVzRsbmZ3SzRMR2ltY3pQbXk4b0FqTEpZbTBKOFUzYUYiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoib3BBUUgxS3pISUgwcEQ2NUJMTkl0TkREMTlZU0dReTQiLCJjbGllbnRfaWQiOiJnZW1hdGlrVGVzdFBzIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NzMsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZFpvVzNVa0xERURmM3QweW1qdUprMlJPeXZvX0s3YVUiLCJleHAiOjE3MTkzOTA1MzMsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MTkzOTA0NzMsImNvZGVfY2hhbGxlbmdlIjoiZ3hoZm52WWNVa0tmZENFODlkb0d0czV6ekt1TkdLdHlYeS1pMFh2U05RVSIsImp0aSI6IjkzOGQzNzFkODc3NGE4N2YifQ.SVFxc3BmOh6AWbPNn_maDqY4OEXCNIXGzNHwIbc5NMYMZ-UyWugbLmdRJAfcgkdwNqJSO6wWCk-mUNDm4s9rJw"
Ein verschachtelt enthaltenes JWT
-}

body.code.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340608
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozMzg5NSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiWGctaG96dzRjcW5WMzQ4cmw3a1BYb0NtQWtjRkY1alAiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiV09pNFdDLTJ6UHlmRmFTTnBIV1ZvbE1teTZJOHJQcHoiLCJjbGllbnRfaWQiOiJnZW1hdGlrVGVzdFBzIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA1NDgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly90ZXN0LXBzLmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiTWRwY1Q5dDYyQUxSamRONFFOY2Q1QnNvSjlZZDlvM3oiLCJleHAiOjE3MjIzNDA2MDgsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MjIzNDA1NDgsImNvZGVfY2hhbGxlbmdlIjoiZnlnMGI5dzBYaEFwYW9mcWVKWUJvVWJpbUd3MlN4V1hEOEdEUGZxcWpXVSIsImp0aSI6ImI1ZWEyNmM1NmU3ZDZjOGUifQ.RzKvzWkCHrQVvaVlBujQEG2CRFHXDfD4qRJYO-tc5Nk2fgEip-2g0gUhbJXQVhqt_2edhgUgyKqU_yrcHZKp-g"
Ein verschachtelt enthaltenes JWT
+}

body.code.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : null,
   "professionOID" : "1.2.276.0.76.4.30",
   "idNummer" : "1-HBA-Testkarte-883110000129084",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:46681",
+  "iss" : "http://localhost:33895",
   "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" : "W4lnfwK4LGimczPmy8oAjLJYm0J8U3aF",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "Xg-hozw4cqnV348rl7kPXoCmAkcFF5jP",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "Günther Graf", "token_type" : "code", - "nonce" : "opAQH1KzHIH0pD65BLNItNDD19YSGQy4",
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.
+ "nonce" : "WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz",
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" : "gematikTestPs",
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" : 1719390473,
Timestamp der Authentisierung
+ "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" : 1722340548,
Timestamp der Authentisierung
"redirect_uri" : "http://test-ps.gematik.de/erezept",
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
- "state" : "dZoW3UkLDEDf3t0ymjuJk2ROyvo_K7aU",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390533,
Gültigkeit des Tokens
+ "state" : "MdpcT9t62ALRjdN4QNcd5BsoJ9Yd9o3z",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340608,
Gültigkeit des Tokens
"family_name" : "Otís", - "iat" : 1719390473,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "gxhfnvYcUkKfdCE89doGts5zzKuNGKtyXy-i0XvSNQU",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "938d371d8774a87f"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt.
{
+  "iat" : 1722340548,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "fyg0b9w0XhApaofqeJYBoUbimGw2SxWXD8GDPfqqjWU",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "b5ea26c56e7d6c8e"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
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" : "CKyXop6reXr4j1Ly0uxO-4mbPjCnyLN_MksARmloAew",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "pbg5Vnd421vl2aHPQkVNlOLW-fbuFQOx_vhnyPfZItI",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "pbBtdrNfYAjrQ-jAlzsqa6jGECHbl_kwXDXrHyc5IQU",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "QPRlXfM52w-xkfNhzxvIOV32egVxapT2ePNWuo270ew",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body
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).

{
+}

Body
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" : "60CUgfHLIko4dpEK8yECifFhICGjvz6XMktJaRSl-PA", - "code_verifier" : "NU69a1QcRQ8DV4YZFUsRlGVWBc_QGGT4KJ2zwHny-rY" -}

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Ftest-ps.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Ftest-ps.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

42200localhost:46681127.0.0.1:-1

42200localhost:33895127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:57 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+Date: Tue, 30 Jul 2024 11:55:53 GMT
+Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:53 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "expires_in" : 300,
   "token_type" : "Bearer",
-  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc3N30..GSpQCQyLPvB02z4I.JBtx7q-ft-QkTTgCfqZUiSSYtTmV_nPqj83FgSjXo_blsxuBdgbSI4qMgsWP61zHd_5xV1eKHycD2qLK52qiGflGRPK87J1f8u368dQuSM2b188OpXuG-61XkXO-k6LiRmL9DxF5OU_hots5HObamNpFpBSr33jn0smKzlA-eCEqqu9LYEtZcBxPM2fFbGFBn1nkBAME7VxoLSqw7HzzfFd8BOq3voVPusMu0Imnq-OcG5P2CWvdSkvWS53zhsmmAPPhFeq1L7BWQY8gWXwRXq1ddudOcgU2LYDbKkzDqyuKyibP9XbzDc1AeEWqLYcoXy4_aJmDt7eXI_1EIYXe5aA0cvPajZvZ4wf8_ECbbhU0ZMjuhlSKnJH1cXT4zp_G9V3uL6YymXBYsfJ3INWEZOx0bafUmvXZ78y1_w1sweEiyRV4Ez4hACLK3DheFBokLIwkczIw_H9PRYPXhs8HRVOeGLS0lUA5nLJLz60W4E5ZTo-LkBLgrixC6bOv4hgDFxPJaBf6TUAk9HhiBmTT_9CvNWCbSvBPSRbKP7TGEqy0PWPsIGmKl16DAZBRfHJOD8d6GPJyNwzeNZ0q0Fu5ahY5aFRsRWMHwQvrfhd0z1v2gcPQLhRC5oQDCskGHMiMUdYtHxtMfvBWGFezope3NlADYQTOgdoaPggCKuzIs2MuT6-PC3izfH1TLbLpDEP7xWJTU3EMuv_cKr3P8TYiOZ3AyXJtAqf5vbJ6_O8MdeMLCPxImZnV8Iosu1Twk95kilJwiigLmutZ-P-4cJNnMCtickFXXr_3cZxhZaKFIqPjcZXiUApNtQAHgLKLbCvi2pVLpLXLUyLYioELbh1JxFdv9DDGtVQfQRktQ2n8L4nr_vyO267792DA9nIghyITzoKYYKfsyYlyYXokLSeOMh-hERcVy93sEZVbV0zMtJXZyCCGz_Eas2ypxdc5Z2B8L5xzOL2KHdQiuD9J7peRAX0pFRjry0pSWHnnUKB82rf1YcK33g0uLpr6iNU3_xHqNuhdPpTdGkmWAyWNMUFkqxcFu2LQOLleLk-Zw_bwiq3FmbELuE-O3dJkAB1cqCNh_0lCd7OcjJdics3hRDrmVhpg2S90OIeVWM3Z_BOqnWFaUZAea5-GSWFnRJgaLavyBDVpPfejuvUY1FMcuWVc7Oh1n9OPFTAtk8moFf6rZHgp7oU.8zJPwvtxAF49KNHxXGEA8g",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
- "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc3N30..CjVQqhWptvJmOJv4.LdFv0tx9T5E6Speg66SMtF0mlZJ66X7jA0iU-2KBXWDkkC23LO6AVXjTpciQNg_HIZqBHMxrWdlTzb6dmoAftStBpXkMA8P-vkAaFyYzO0IVe0X6Uillq5aXRYUFPlO9MOoUsrHThQ4VldVD-z89uEzJ328w6O2kTwALIDcybBVFKlo5Z3vu0hAyHGQuT-FDQcnyjynA4jIpvBktXyf3r3XPj8DMTxaE0Aixiew-1Rp1hLiB4Z9xp3Jz4alQZhWrhQ2Dz2E7HenPAPogsGF8xfvCIaVOg78x9K6ER407yrcOxdMOLUuxbLkEMXeTFa9C8Js7GmP2VZ8I5T6LpkNQNwsKAjEbZwwK3PpkylU0WU4wCbz4fSvVy-TzLtBlPJB9_b84MCCJZx1o33Uv2li7yKl8PD2EldEFyYKiMUCGk2lD7wMJY3Z1JhV9c1kxjcF241J2kErY_OVlwKQNfoTE0swbImB68MDswzvKa49NmPxCAAKJaC_8ViGZfpsSiv2tL3ENUOZhmjV8Tz7zho886tmY-aGnEi4dtujYd65ZdgJDzXZwMfCFT1t_qjVJck4AeR6a6qq3IcJs6y3qtfPflZ77W9vnL8pJceFPi7TPIA3gUPdBYkDvZjLVlmt1TGS9HivHKDA7PFGI7TmhYENKEIX-fy-Vta16K_GxIevuvvtL-EPUtJAfQ1jBV-c1KsB1qANWLsaGLfDWCp_OWbVJB8TJW9eeCqiEdFHd2Gb6LO2OYFVDCVkLB6cKJZPKDc8ySmVeg5PR_RzHf9u5l2XzI9HshBPJwACs0TRhr8iS-yb4M0PTA_VKRLOrGdMgL1-b-_YR1sIk3b3Auyrv5J3gTWmSsWvdqPZD15PiJi6WZZMVfcvGGP4aEysyhKwUCoh0kpVIOhCYths5i4tCQ_d8qwj8yoQiHqWpZSQvBDHXW6w12T1l6bL16FT7Or9NEgZIcjjb_-dw00BgHiOe5JizwasNhPj1W7BMzZ6NKgReuxv91sx70c39gxA-p9TcQ3QEGDZmZm-M8G4cYvE4yQK8vShE5Gzihmdpc_PRuaKS185paFJvT1Pw-MgChU8ZQsnfipDndY8t--JSytuui5Di4rqLHHUlINUzdbDjvFTrxaxVuV8ATvkFXekglvFzvRGNQ_8x3ijRYbc-j14IIp8Stwdt0ju-8GctArIzF_Xv7CMtOseqcWOk3a4TPbv8CIE3JPQZglj2ACATv0k.x9MQmUJbFlBiwF13RHU9WA"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
-}

body.id_token.content

JWE

Headers
{
+  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDg1M30..kbJDwFd6DLWEgU-v.9a9CDu0ukA03Xp2dSyYmZOMXy2yAPE8aNPFWJ1SD2ejQ4C7PCic_z7wmaoGqveWppXds5MQb0Ja7TYhG1P59McBGVJZ5j0QUUlg4a6ESNNRG2NZbs6NEtzWvTmgor7agNrjIbusGg0AkUTO9BhbdVd0E1kX_TngNKIs5RNRfTtOYAJMzFBXssEq-Z_we9OPQ9VGwmuaWbEe1B140dj-NG5FYl6PU1bD0q109eAouBjt-tIgJL5wH8JddnPhqqVFMbozOBNRglyaEK2cyTqugeuaTYIpb68kZNH_yD65z5Z25dRzaJ5TmyzloxbuXwNDqTKF-Uq-d6fCD8BCrOFmvwKXTr8nDw5srUVQZ0sO7teqYT9aUhygSJXHO1aIxdtWiRqE2Ijkgg6lUyCc71q2C1Jmh7qq1-3Dbtj3Z-jtenqmfDtWzNzj3lG6nBXCy2MH_v1aD9dtd4zu6n2OTKZoncUM5B5CRTXsTCzj-x4cSi_uXfy3ASwWdUaY9suInsv6FZWDZ4JT5PNEA0KX2NJBHCdqWsbpU4pbt3rAmqx0qi23ovFHa-_z6MjXzO4q68HC8_K8VzeD87q50iednZNwKupTOxeg9aN8SUsUy-78Wd_eFWNwMwvKK26pfiTyr8E6mh3ZnlRXJZ0RO8Y-kH3AJ-Koe7QmWyR-vp01aGZJRHgmWhxymFeSAcn9Fif3AbkG6ua6LA8ZOKwL_P5zdWdkWY9wkyJU6FFKB5FN7huHfCMGMo2ZGp4ccYReRSMsspLJOceZsNFjt4oC8r7JUV-n08cSRSGxFnmJ9z3wL7nWFyAUmuSUdoDi4QPpa7YYMpE35QHci2vCkHMwZ0b0Egw5PNHy0RUfsIl3tB8D6rqDLKQPNtqrI4ZBs1xx_bh9otQB6jH3LgkZRuefoSC_MzavckjuzGgCyCegI0TaTDE5HheUWvvqrsfQl4DdfxLEnZNLuOQmFYUN4dI5uaaB5ru5Eg1ifwGQW7cmuSERnGAdumzM5rWa6iEHlXABr79cbaOg-YsONW4fx9n58SjCvDMKQDDQO58Nk-sc2UQT0U4asHlc5tUoSV9SDB8dCbUCuKj5X2Xqu7BMGcPMs-xQ-Th9zNi7u8pJytBoxb06lu4w2soFNHz0QVBoNmkcX2ylgxzZKE025K_c6tLdqER3mHcs_N-psLxM4Hr-E4-TVg7YNcrbm5tc.6WIRMtffZviY-N9KyBTvjg",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+ "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDg1M30..N7Byrej_2IttTIT0.Xb6MyxY_Z0J3t8HO12G0CR-Exx0Q9q8XF1qgpG2YWHhUhvJS_k5WXyh3-U4YsFs9RNcvcALBFUUGrldqW7aEkR_cO6b0PoL9SuOqhoGJQAAGfQmtRPyDw5wh0a3ehwy4eKFY_3QIHnLlFwUxQ26jWAX9skihw_eAne06qviBeUIwkvLH_KGy3-RQSq69eEJplaRQeBTl1Dm-fDobQIgjfdRXqG3lG5XCeniVL5Qvkdnf4VRw6zcpl9nQ755J59EJV-AsQhPhoyc6B3XHVtX9cYbaqSrl6u1KrVH-tehQUoO71wEf3a-hif7hooJi6jYPG5mN4dibCemRtY9GG0Y9PKutsnrfNBAHObtMg03TniVhXc_XOqv4ivlLtEnIXGGNFZCp7ee26dpmqfr7PMk9QIvS0M1Nktyi9NLk0SRqPzqg7ZJCFYNaovgDowMcN__NPWovP5xOmFqC1tgI-HbFcnM2IyU8K_yiQuZpV6eRRZqS6eCxfIxKNRIOBrSHCB-M8U4o0RJa5J4PhijHT5I_yM89SE1Cx7FBJjo3QlfYSdgWRbMayfaxD1RQq3pCMcStFr9rOlPrnQf_vkgZ36a0geW1artFbamV7J7eb5WaliUWojLMPuL-YnzpbUQzSgbsVsDZbU5b8EOv2VQAVgxvkr7ZbFBbFbbv6prXta4QgWPZyIlyT-L7Ag34M-m4AKsI5oAlWpZVBT7z7N0icX-GnHT5_z1IFYAHnFFWgj6D2lePexn-sxKCbe85CIpntjEYFmTXDgCkvNOUVf-COuztCJn3sEjQlx3h8DH50JjV3aW6H8z5z-7lQdPzEUrH8ZbPPUom369MoUa8N4ES5xPgcV06iBLwX0g1V1cuWLxtiFMQl3JO_DhZzA31YDZ2k54iOUVy6bPzcnA5skIZW_KRUyt7aXZGhNXFjB7Q5Qf6qNWeOPSrIRBb-FG-FczRvybv9jSHAXXWF2AGVBDVd3uFsoqN9CFXElMwPpDpf6hr2wZMobEMBinzOv2dxAcUFS-yNA-4_2TAUdi7_L_OzJwGLnrtfSnbJxGJx2KYJVd5o0sJ2eEI7Xvgkcu-jNtSOg_zk6whmydqR3IbL0LzLW6XJ3kD9N45ZQj8EzNEn0fzx-BaCqFpRznAq7XVXTtWeiVcRa5Cj98LZTjfS54Sdr9ZMD6IKPwHPCZBv1vKm1gu64g6atR1Rim8GUzSrMxcehx-4sEv4Nj5HzCt_FE.qg0Q9nu8is39zL5qz9UTcg"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+}

body.id_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390777
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiYW1TNV9scXYxUUhqVkJGUkl5ekRRQSIsInN1YiI6InhtTnlFdDBxR3pTT3M4Q0dORXRDUkNaa1ctbW5kdnVxV2hFWDdmU1FOODAiLCJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJkaXNwbGF5X25hbWUiOiJHw7xudGhlciBHcmFmIE90w61zIiwibm9uY2UiOiJvcEFRSDFLekhJSDBwRDY1QkxOSXROREQxOVlTR1F5NCIsImF1ZCI6ImdlbWF0aWtUZXN0UHMiLCJhY3IiOiJnZW1hdGlrLWVoZWFsdGgtbG9hLWhpZ2giLCJhenAiOiJnZW1hdGlrVGVzdFBzIiwiYXV0aF90aW1lIjoxNzE5MzkwNDczLCJleHAiOjE3MTkzOTA3NzcsImlhdCI6MTcxOTM5MDQ3NywiZmFtaWx5X25hbWUiOiJPdMOtcyIsImp0aSI6IjU1MjQxNzkwNGEwNmJiMzcifQ.J3LgSxuJG9RkZvFlOLBWaL7_M2Aj0ovMKAYamVF-hSkjg6aflQvH9o7qkQ1C4u7jkjNdRcWd-cZJEnuxT_pp5g"
Ein verschachtelt enthaltenes JWT
-}

body.id_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340853
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiUWlFWjR3RWNLa1haNV9ZbUlkTmlfUSIsInN1YiI6InhtTnlFdDBxR3pTT3M4Q0dORXRDUkNaa1ctbW5kdnVxV2hFWDdmU1FOODAiLCJvcmdhbml6YXRpb25OYW1lIjpudWxsLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuMzAiLCJpZE51bW1lciI6IjEtSEJBLVRlc3RrYXJ0ZS04ODMxMTAwMDAxMjkwODQiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkfDvG50aGVyIEdyYWYiLCJkaXNwbGF5X25hbWUiOiJHw7xudGhlciBHcmFmIE90w61zIiwibm9uY2UiOiJXT2k0V0MtMnpQeWZGYVNOcEhXVm9sTW15Nkk4clBweiIsImF1ZCI6ImdlbWF0aWtUZXN0UHMiLCJhY3IiOiJnZW1hdGlrLWVoZWFsdGgtbG9hLWhpZ2giLCJhenAiOiJnZW1hdGlrVGVzdFBzIiwiYXV0aF90aW1lIjoxNzIyMzQwNTQ4LCJleHAiOjE3MjIzNDA4NTMsImlhdCI6MTcyMjM0MDU1MywiZmFtaWx5X25hbWUiOiJPdMOtcyIsImp0aSI6Ijc3NWRhOGU2NWRmOWQxOTcifQ.BMQ3AZVKaubhVL0rkOi7lutkmy3hGRx9OQj5-Zn_IwgnrKkmqD7fJ2E2Wwv6dUbFPOOwSBAP4WhDPUjJjX-Upw"
Ein verschachtelt enthaltenes JWT
+}

body.id_token.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "at_hash" : "amS5_lqv1QHjVBFRIyzDQA",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
+}

Body

{
+  "at_hash" : "QiEZ4wEcKkXZ5_YmIdNi_Q",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
"sub" : "xmNyEt0qGzSOs8CGNEtCRCZkW-mndvuqWhEX7fSQN80",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"organizationName" : null, "professionOID" : "1.2.276.0.76.4.30", @@ -806,27 +806,27 @@ "iss" : "https://idp.dev.gematik.solutions", "given_name" : "Günther Graf", "display_name" : "Günther Graf Otís", - "nonce" : "opAQH1KzHIH0pD65BLNItNDD19YSGQy4",
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.
+ "nonce" : "WOi4WC-2zPyfFaSNpHWVolMmy6I8rPpz",
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.
"aud" : "gematikTestPs", "acr" : "gematik-ehealth-loa-high", "azp" : "gematikTestPs", - "auth_time" : 1719390473,
Timestamp der Authentisierung
- "exp" : 1719390777,
Gültigkeit des Tokens
- "iat" : 1719390477,
Zeitpunkt der Ausstellung des Tokens
+ "auth_time" : 1722340548,
Timestamp der Authentisierung
+ "exp" : 1722340853,
Gültigkeit des Tokens
+ "iat" : 1722340553,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Otís", - "jti" : "552417904a06bb37"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
+  "jti" : "775da8e65df9d197"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390777
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJ4bU55RXQwcUd6U09zOENHTkV0Q1JDWmtXLW1uZHZ1cVdoRVg3ZlNRTjgwIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjMwIiwib3JnYW5pemF0aW9uTmFtZSI6bnVsbCwiaWROdW1tZXIiOiIxLUhCQS1UZXN0a2FydGUtODgzMTEwMDAwMTI5MDg0IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwiZGlzcGxheV9uYW1lIjoiR8O8bnRoZXIgR3JhZiBPdMOtcyIsImNsaWVudF9pZCI6ImdlbWF0aWtUZXN0UHMiLCJhY3IiOiJnZW1hdGlrLWVoZWFsdGgtbG9hLWhpZ2giLCJhdWQiOiJodHRwczovL2VycC10ZXN0LnplbnRyYWwuZXJwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUvIiwiYXpwIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0IiwiYXV0aF90aW1lIjoxNzE5MzkwNDczLCJleHAiOjE3MTkzOTA3NzcsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MTkzOTA0NzcsImp0aSI6ImQ1YjE3NWIyMDgyYTJlNDMifQ.YOK9fjEn-N9FZvCvEJWmtCs25poPSZSvmajEd0FNf_o12eB7lDaZY2EeD2GlWfLDYOwefdtt3RobD60O8HuGSg"
Ein verschachtelt enthaltenes JWT
-}

body.access_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340853
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJ4bU55RXQwcUd6U09zOENHTkV0Q1JDWmtXLW1uZHZ1cVdoRVg3ZlNRTjgwIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjMwIiwib3JnYW5pemF0aW9uTmFtZSI6bnVsbCwiaWROdW1tZXIiOiIxLUhCQS1UZXN0a2FydGUtODgzMTEwMDAwMTI5MDg0IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJHw7xudGhlciBHcmFmIiwiZGlzcGxheV9uYW1lIjoiR8O8bnRoZXIgR3JhZiBPdMOtcyIsImNsaWVudF9pZCI6ImdlbWF0aWtUZXN0UHMiLCJhY3IiOiJnZW1hdGlrLWVoZWFsdGgtbG9hLWhpZ2giLCJhdWQiOiJodHRwczovL2VycC10ZXN0LnplbnRyYWwuZXJwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUvIiwiYXpwIjoiZ2VtYXRpa1Rlc3RQcyIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwiYXV0aF90aW1lIjoxNzIyMzQwNTQ4LCJleHAiOjE3MjIzNDA4NTMsImZhbWlseV9uYW1lIjoiT3TDrXMiLCJpYXQiOjE3MjIzNDA1NTMsImp0aSI6ImI3YTM4Y2U1NTU4MjFlZWIifQ.Fs-_aOZUcC8zK3QQXePJ8qC5p8PRhsp3sQtd9Pq2ysM9Qa0JdLUkACVREvV-qnesbBiZbIEQb2ALTDxdSi7_OQ"
Ein verschachtelt enthaltenes JWT
+}

body.access_token.content.body.njwt.content

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "at+JWT",
   "kid" : "puk_idp_sig"
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
-}

Body

{
+}

Body

{
   "sub" : "xmNyEt0qGzSOs8CGNEtCRCZkW-mndvuqWhEX7fSQN80",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"professionOID" : "1.2.276.0.76.4.30", "organizationName" : null, @@ -839,13 +839,13 @@ "acr" : "gematik-ehealth-loa-high", "aud" : "https://erp-test.zentral.erp.splitdns.ti-dienste.de/", "azp" : "gematikTestPs", - "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" : 1719390473,
Timestamp der Authentisierung
- "exp" : 1719390777,
Gültigkeit des Tokens
+ "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" : 1722340548,
Timestamp der Authentisierung
+ "exp" : 1722340853,
Gültigkeit des Tokens
"family_name" : "Otís", - "iat" : 1719390477,
Zeitpunkt der Ausstellung des Tokens
- "jti" : "d5b175b2082a2e43"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

Created Wed, 26 Jun 2024 10:28:01 +0200
\ No newline at end of file + \ No newline at end of file diff --git a/doc/tokenFlowSso.html b/doc/tokenFlowSso.html index f7b7229..66df0bf 100644 --- a/doc/tokenFlowSso.html +++ b/doc/tokenFlowSso.html @@ -454,55 +454,55 @@ color: #0fc5d9!important; }
Gerendert mit https://github.com/gematik/app-RbelLogger
Created Wed, 26 Jun 2024 10:27:45 +0200
Created Tue, 30 Jul 2024 13:55:40 +0200

13 GET http://localhost:43371/.well-known/openid-configuration127.0.0.1:-1localhost:45067

13 GET http://localhost:35601/.well-known/openid-configuration127.0.0.1:-1localhost:36171

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:45067
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

REQ Headers

Connection
Upgrade, HTTP2-Settings
Nicht verpflichtend
Nicht verpflichtend
Content-Length
0
Host
localhost:36171
Nicht verpflichtend
Nicht verpflichtend
Upgrade
h2c
Accept-Encoding
gzip
Nicht verpflichtend
Nicht verpflichtend
User-Agent
IdP-Client
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Der User-Agent des Clients. Muss vorhanden sein. Wird gegen eine Blocklist geprüft
Empty body

14200localhost:45067127.0.0.1:-1

14200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
3118
Date
Wed, 26 Jun 2024 08:27:16 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
+Date: Tue, 30 Jul 2024 11:55:10 GMT
+Content-Type: application/jwt;charset=UTF-8

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
3118
Date
Tue, 30 Jul 2024 11:55:10 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/jwt;charset=UTF-8

RES Body

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "JWT",
   "kid" : "puk_disc_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"x5c" : [ "MIICsTCCAligAwIBAgIHAbssqQhqOzAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMTAxMTUwMDAwMDBaFw0yNjAxMTUyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAzMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABIYZnwiGAn5QYOx43Z8MwaZLD3r/bz6BTcQO5pbeum6qQzYD5dDCcriw/VNPPZCQzXQPg4StWyy5OOq9TogBEmOjge0wgeowDgYDVR0PAQH/BAQDAgeAMC0GBSskCAMDBCQwIjAgMB4wHDAaMAwMCklEUC1EaWVuc3QwCgYIKoIUAEwEggQwIQYDVR0gBBowGDAKBggqghQATASBSzAKBggqghQATASBIzAfBgNVHSMEGDAWgBQo8Pjmqch3zENF25qu1zqDrA4PqDA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wHQYDVR0OBBYEFC94M9LgW44lNgoAbkPaomnLjS8/MAwGA1UdEwEB/wQCMAAwCgYIKoZIzj0EAwIDRwAwRAIgCg4yZDWmyBirgxzawz/S8DJnRFKtYU/YGNlRc7+kBHcCIBuzba3GspqSmoP1VwMeNNKNaLsgV8vMbDJb30aqaiX1"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
] -}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
-  "authorization_endpoint" : "http://localhost:43371/sign_response",
URL des Authorization Endpunkts.
- "auth_pair_endpoint" : "http://localhost:43371/alt_response",
URL des Biometrie-Authorization Endpunkts.
- "sso_endpoint" : "http://localhost:43371/sso_response",
URL des SSO-Authorization Endpunkts.
- "uri_pair" : "http://localhost:43371/pairings",
URL des Pairing-Endpunkts
- "token_endpoint" : "http://localhost:43371/token",
URL des Authorization Endpunkts.
- "third_party_authorization_endpoint" : "http://localhost:43371/extauth", +}

body.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 3

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 487275465566779

Valid From: 2021-01-15T00:00Z[UTC]

Valid Until: 2026-01-15T23:59:59Z[UTC]


Body

{
+  "authorization_endpoint" : "http://localhost:35601/sign_response",
URL des Authorization Endpunkts.
+ "auth_pair_endpoint" : "http://localhost:35601/alt_response",
URL des Biometrie-Authorization Endpunkts.
+ "sso_endpoint" : "http://localhost:35601/sso_response",
URL des SSO-Authorization Endpunkts.
+ "uri_pair" : "http://localhost:35601/pairings",
URL des Pairing-Endpunkts
+ "token_endpoint" : "http://localhost:35601/token",
URL des Authorization Endpunkts.
+ "third_party_authorization_endpoint" : "http://localhost:35601/extauth", "federation_authorization_endpoint" : "https://idpfadi.dev.gematik.solutions/auth", - "uri_disc" : "http://localhost:43371/.well-known/openid-configuration",
URL des Discovery-Dokuments
+ "uri_disc" : "http://localhost:35601/.well-known/openid-configuration",
URL des Discovery-Dokuments
"issuer" : "https://idp.dev.gematik.solutions", - "jwks_uri" : "http://localhost:43371/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
- "exp" : 1719476836,
Gültigkeit des Tokens
- "iat" : 1719390436,
Zeitpunkt der Ausstellung des Tokens
- "uri_puk_idp_enc" : "http://localhost:43371/idpEnc/jwk.json", - "uri_puk_idp_sig" : "http://localhost:43371/idpSig/jwk.json", + "jwks_uri" : "http://localhost:35601/jwks",
URL einer JWKS-Struktur mit allen vom Server verwendeten Schlüsseln
+ "exp" : 1722426910,
Gültigkeit des Tokens
+ "iat" : 1722340510,
Zeitpunkt der Ausstellung des Tokens
+ "uri_puk_idp_enc" : "http://localhost:35601/idpEnc/jwk.json", + "uri_puk_idp_sig" : "http://localhost:35601/idpSig/jwk.json", "subject_types_supported" : [ "pairwise" ], "id_token_signing_alg_values_supported" : [ "BP256R1" ], "response_types_supported" : [ "code" ], @@ -512,23 +512,23 @@ "acr_values_supported" : [ "gematik-ehealth-loa-high" ], "token_endpoint_auth_methods_supported" : [ "none" ], "code_challenge_methods_supported" : [ "S256" ], - "kk_app_list_uri" : "http://localhost:43371/directory/kk_apps", - "fed_idp_list_uri" : "http://localhost:43371/fed_idp_list" -}

Signature

Was verified using Key puk_disc_sig

Signature

Was verified using Key puk_disc_sig

15 GET http://localhost:43371/idpSig/jwk.json127.0.0.1:-1localhost:45067

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

15 GET http://localhost:35601/idpSig/jwk.json127.0.0.1:-1localhost:36171

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

16200localhost:45067127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:27:20 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"x5c":["MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"],"use":"sig","kid":"puk_idp_sig","kty":"EC","crv":"BP-256","x":"llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk","y":"ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"}

16200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:55:14 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "x5c" : [ "MIICsTCCAligAwIBAgIHA61I5ACUjTAKBggqhkjOPQQDAjCBhDELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxMjAwBgNVBAsMKUtvbXBvbmVudGVuLUNBIGRlciBUZWxlbWF0aWtpbmZyYXN0cnVrdHVyMSAwHgYDVQQDDBdHRU0uS09NUC1DQTEwIFRFU1QtT05MWTAeFw0yMDA4MDQwMDAwMDBaFw0yNTA4MDQyMzU5NTlaMEkxCzAJBgNVBAYTAkRFMSYwJAYDVQQKDB1nZW1hdGlrIFRFU1QtT05MWSAtIE5PVC1WQUxJRDESMBAGA1UEAwwJSURQIFNpZyAxMFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABJZQrG1NWxIB3kz/6Z2zojlkJqN3vJXZ3EZnJ6JXTXw5ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcajge0wgeowHQYDVR0OBBYEFJ8DVLAZWT+BlojTD4MT/Na+ES8YMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL2VoY2EuZ2VtYXRpay5kZS9vY3NwLzAMBgNVHRMBAf8EAjAAMCEGA1UdIAQaMBgwCgYIKoIUAEwEgUswCgYIKoIUAEwEgSMwHwYDVR0jBBgwFoAUKPD45qnId8xDRduartc6g6wOD6gwLQYFKyQIAwMEJDAiMCAwHjAcMBowDAwKSURQLURpZW5zdDAKBggqghQATASCBDAOBgNVHQ8BAf8EBAMCB4AwCgYIKoZIzj0EAwIDRwAwRAIgVBPhAwyX8HAVH0O0b3+VazpBAWkQNjkEVRkv+EYX1e8CIFdn4O+nivM+XVi9xiKK4dW1R7MD334OpOPTFjeEhIVV"
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "use" : "sig",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_sig",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
@@ -536,49 +536,49 @@ "crv" : "BP-256", "x" : "llCsbU1bEgHeTP_pnbOiOWQmo3e8ldncRmcnoldNfDk",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "ZDFZ5XjwWmtgfomv3VOV7qzI5ycUSJysMWDEu3mqRcY"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

body.x5c.0.content

X509 Certificate

Subject: C=DE,O=gematik TEST-ONLY - NOT-VALID,CN=IDP Sig 1

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Komponenten-CA der Telematikinfrastruktur,CN=GEM.KOMP-CA10 TEST-ONLY

Serialnumber: 1034953504625805

Valid From: 2020-08-04T00:00Z[UTC]

Valid Until: 2025-08-04T23:59:59Z[UTC]


17 GET http://localhost:43371/idpEnc/jwk.json127.0.0.1:-1localhost:45067

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

17 GET http://localhost:35601/idpEnc/jwk.json127.0.0.1:-1localhost:36171

REQ Headers

accept-encoding
gzip
user-agent
IdP-Client
Empty body

18200localhost:45067127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
28.0.2
Date
Wed, 26 Jun 2024 08:27:22 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+{"use":"enc","kid":"puk_idp_enc","kty":"EC","crv":"BP-256","x":"QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w","y":"mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"}

18200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Version
29.0.1
Date
Tue, 30 Jul 2024 11:55:16 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "use" : "enc",
Erlaubte Verwendungen des Schlüssels. Siehe https://tools.ietf.org/html/rfc7517#section-4.2
"kid" : "puk_idp_enc",
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
"kty" : "EC", "crv" : "BP-256", "x" : "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w",
X-Koordinate des öffentlichen Punkts des Schlüssels
"y" : "mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4"
Y-Koordinate des öffentlichen Punkts des Schlüssels
-}

19 GET http://localhost:43371/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j&code_challenge=VXxFqVYxx5LzANtAW35EVu9vNf8j_N2mwGJOg1su8MY&code_challenge_method=S256&scope=openid+e-rezept&nonce=wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP127.0.0.1:-1localhost:45067

19 GET http://localhost:35601/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=QGcvgqGNVkXjINMqboCWFD4ncB4ytswG&code_challenge=s1BL22pF2p7uAjJzC3-OdlL8pYAwV8OzCKFN6RcpmfI&code_challenge_method=S256&scope=e-rezept+openid&nonce=zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7127.0.0.1:-1localhost:36171

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

20200localhost:45067127.0.0.1:-1

20200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:22 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
-  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ1MDY3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJpUjZaUHhZU19RMXJ4Skgyc1RJNGlEOHFIZUJMc0lNUk90dFh4SmZKTURFIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IndwcmZpMlY0cFdyZHpGc2JuSDd6ZmJjSWt2U0ZsNWdQIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJHLXVGN3BaZGg3ZExuWS1PSzJVT1hpSkNWZUdtakswaiIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MTkzOTA2MjMsImlhdCI6MTcxOTM5MDQ0MywiY29kZV9jaGFsbGVuZ2UiOiJWWHhGcVZZeHg1THpBTnRBVzM1RVZ1OXZOZjhqX04ybXdHSk9nMXN1OE1ZIiwianRpIjoiNzA4MzA3MDExNzdmYjc3MSJ9.QjvvcDB974QGo_kRINcJqw-miK25slQBxVglx7zy_xpDXFhuc3hZMGdghrr_-TcCsO-24tKEY4ns9dpamijJMg",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
+Date: Tue, 30 Jul 2024 11:55:16 GMT +Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:16 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM2MTcxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJIdF93OEl3akYzLWFwYmFmMGdNdE12VkJCVGljakdQZE9zbUdFS2xsWnVvIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6Inptbk1ZcldpVzlZX1k0b2xMLWt0SGhuYlpPUkxhZmc3IiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJRR2N2Z3FHTlZrWGpJTk1xYm9DV0ZENG5jQjR5dHN3RyIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MjIzNDA2OTcsImlhdCI6MTcyMjM0MDUxNywiY29kZV9jaGFsbGVuZ2UiOiJzMUJMMjJwRjJwN3VBakp6QzMtT2RsTDhwWUF3VjhPekNLRk42UmNwbWZJIiwianRpIjoiOWFhMTc0MTJiYWYwZjAwMSJ9.Psn3fXLretNwLo7rjcNqEsEdB6SQ_lc4XVqYJPtaBhsgkpwdVy-56sthaim652DiNpRtjEdyiVEJUEZ5LIff6g",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
"user_consent" : { "requested_scopes" : { "e-rezept" : "Zugriff auf die E-Rezept-Funktionalität.", @@ -593,136 +593,136 @@ "family_name" : "Zustimmung zur Verarbeitung des Nachnamens" } } -}

body.challenge.content

JWT

Headers
{
+}

body.challenge.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:45067",
+}

Body

{
+  "iss" : "http://localhost:36171",
   "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" : "iR6ZPxYS_Q1rxJH2sTI4iD8qHeBLsIMROttXxJfJMDE",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "Ht_w8IwjF3-apbaf0gMtMvVBBTicjGPdOsmGEKllZuo",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP",
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.
+ "nonce" : "zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7",
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.
- "state" : "G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "QGcvgqGNVkXjINMqboCWFD4ncB4ytswG",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390623,
Gültigkeit des Tokens
- "iat" : 1719390443,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "VXxFqVYxx5LzANtAW35EVu9vNf8j_N2mwGJOg1su8MY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "70830701177fb771"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key puk_idp_sig

21 POST http://localhost:43371/sign_response127.0.0.1:-1localhost:45067

21 POST http://localhost:35601/sign_response127.0.0.1:-1localhost:36171

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3978

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
+content-length: 3978

REQ Headers

accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3978

REQ Body

namevalue
signed_challenge

JWE

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Headers
{
   "alg" : "ECDH-ES",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390623,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
+ "exp" : 1722340697,
Gültigkeit des Tokens
Dieser EXP-Header muss exakt dem EXP-Wert aus dem Body der Server-Challenge entsprechen.
"epk" : { "kty" : "EC", - "x" : "MDjWtCLMgLCPos2gHVeCvMYdqNosQlMbARn-gKBuIBQ",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "LLt75SAAW31tLzSwvmJIeDw2MqR3YTnppGhy1oaqZdo",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "A0DtS7DUwFOzfKslAVKuOgrwBbcQLBeyqQ2I6LOKQmU",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "lY2KP92Aa71OyI8qmxMy3xytbnjIObnxmFeFCMT8jHE",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body

{
-  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwiYWxnIjoiQlAyNTZSMSJ9.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pRMU1EWTNJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKcFVqWmFVSGhaVTE5Uk1YSjRTa2d5YzFSSk5HbEVPSEZJWlVKTWMwbE5VazkwZEZoNFNtWktUVVJGSWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNkluZHdjbVpwTWxZMGNGZHlaSHBHYzJKdVNEZDZabUpqU1d0MlUwWnNOV2RRSWl3aVkyeHBaVzUwWDJsa0lqb2laVkpsZW1Wd2RFRndjQ0lzSW5OamIzQmxJam9pYjNCbGJtbGtJR1V0Y21WNlpYQjBJaXdpYzNSaGRHVWlPaUpITFhWR04zQmFaR2czWkV4dVdTMVBTekpWVDFocFNrTldaVWR0YWtzd2FpSXNJbkpsWkdseVpXTjBYM1Z5YVNJNkltaDBkSEE2THk5eVpXUnBjbVZqZEM1blpXMWhkR2xyTG1SbEwyVnlaWHBsY0hRaUxDSmxlSEFpT2pFM01Ua3pPVEEyTWpNc0ltbGhkQ0k2TVRjeE9UTTVNRFEwTXl3aVkyOWtaVjlqYUdGc2JHVnVaMlVpT2lKV1dIaEdjVlpaZUhnMVRIcEJUblJCVnpNMVJWWjFPWFpPWmpocVgwNHliWGRIU2s5bk1YTjFPRTFaSWl3aWFuUnBJam9pTnpBNE16QTNNREV4TnpkbVlqYzNNU0o5LlFqdnZjREI5NzRRR29fa1JJTmNKcXctbWlLMjVzbFFCeFZnbHg3enlfeHBEWEZodWMzaFpNR2RnaHJyXy1UY0NzTy0yNHRLRVk0bnM5ZHBhbWlqSk1nIn0.kqlcEPWpJFhnx285OhPPTzQCbowL-nUyFj3GO4bIySeYsKKthGsd5LXdjsSv6V8WvrNHFc56vSz3JN3KJ6DnzQ"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content

JWT

Headers
{
+}

Body

{
+  "njwt" : "eyJ0eXAiOiJKV1QiLCJjdHkiOiJOSldUIiwieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwiYWxnIjoiQlAyNTZSMSJ9.eyJuand0IjoiZXlKaGJHY2lPaUpDVURJMU5sSXhJaXdpZEhsd0lqb2lTbGRVSWl3aWEybGtJam9pY0hWclgybGtjRjl6YVdjaWZRLmV5SnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pNMk1UY3hJaXdpY21WemNHOXVjMlZmZEhsd1pTSTZJbU52WkdVaUxDSnpibU1pT2lKSWRGOTNPRWwzYWtZekxXRndZbUZtTUdkTmRFMTJWa0pDVkdsamFrZFFaRTl6YlVkRlMyeHNXblZ2SWl3aVkyOWtaVjlqYUdGc2JHVnVaMlZmYldWMGFHOWtJam9pVXpJMU5pSXNJblJ2YTJWdVgzUjVjR1VpT2lKamFHRnNiR1Z1WjJVaUxDSnViMjVqWlNJNklucHRiazFaY2xkcFZ6bFpYMWswYjJ4TUxXdDBTR2h1WWxwUFVreGhabWMzSWl3aVkyeHBaVzUwWDJsa0lqb2laVkpsZW1Wd2RFRndjQ0lzSW5OamIzQmxJam9pWlMxeVpYcGxjSFFnYjNCbGJtbGtJaXdpYzNSaGRHVWlPaUpSUjJOMlozRkhUbFpyV0dwSlRrMXhZbTlEVjBaRU5HNWpRalI1ZEhOM1J5SXNJbkpsWkdseVpXTjBYM1Z5YVNJNkltaDBkSEE2THk5eVpXUnBjbVZqZEM1blpXMWhkR2xyTG1SbEwyVnlaWHBsY0hRaUxDSmxlSEFpT2pFM01qSXpOREEyT1Rjc0ltbGhkQ0k2TVRjeU1qTTBNRFV4Tnl3aVkyOWtaVjlqYUdGc2JHVnVaMlVpT2lKek1VSk1Nakp3UmpKd04zVkJha3A2UXpNdFQyUnNURGh3V1VGM1ZqaFBla05MUms0MlVtTndiV1pKSWl3aWFuUnBJam9pT1dGaE1UYzBNVEppWVdZd1pqQXdNU0o5LlBzbjNmWExyZXROd0xvN3JqY05xRXNFZEI2U1FfbGM0WFZxWUpQdGFCaHNna3B3ZFZ5LTU2c3RoYWltNjUyRGlOcFJ0akVkeWlWRUpVRVo1TElmZjZnIn0.AS50JBB7ObVWGwi8cb0h48LfeJ7NJ2CU5zK4HvU8RlI_dh0RTnNm9Bx_5n_TIWWSaR5gbuWMf_YqAeFzaAMnAg"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content

JWT

Headers
{
   "typ" : "JWT",
   "cty" : "NJWT",
   "x5c" : [ "MIIDSzCCAvKgAwIBAgIHA25VKAHcvzAKBggqhkjOPQQDAjCBljELMAkGA1UEBhMCREUxHzAdBgNVBAoMFmdlbWF0aWsgR21iSCBOT1QtVkFMSUQxRTBDBgNVBAsMPEVsZWt0cm9uaXNjaGUgR2VzdW5kaGVpdHNrYXJ0ZS1DQSBkZXIgVGVsZW1hdGlraW5mcmFzdHJ1a3R1cjEfMB0GA1UEAwwWR0VNLkVHSy1DQTEwIFRFU1QtT05MWTAeFw0yMjExMjQwMDAwMDBaFw0yNTA1MTkyMzU5NTlaMIHOMQswCQYDVQQGEwJERTEdMBsGA1UECgwUVGVzdCBHS1YtU1ZOT1QtVkFMSUQxEzARBgNVBAsMClgxMTA0MTE2NzUxEjAQBgNVBAsMCTEwOTUwMDk2OTESMBAGA1UEBAwJQsO2ZGVmZWxkMSIwIAYDVQQqDBlEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvMT8wPQYDVQQDDDZEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIEdyYWYgdm9uIELDtmRlZmVsZCBURVNULU9OTFkwWjAUBgcqhkjOPQIBBgkrJAMDAggBAQcDQgAEHlNcoznjdoi0Yxv27B3yGaE/19vjOJI78wT2yDcec+mWAlRc/fE/ByhPc/IOLkgsaZmbKuNQhhepE4PQ4qtYDaOB7zCB7DAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFESxTAFYVB7c2Te+5LI/Km6kXIkdMB0GA1UdDgQWBBRKV33xfqk2Htd8LzU4tJTYXVLtmTA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9laGNhLmdlbWF0aWsuZGUvb2NzcC8wDgYDVR0PAQH/BAQDAgeAMCAGA1UdIAQZMBcwCgYIKoIUAEwEgSMwCQYHKoIUAEwERjAwBgUrJAgDAwQnMCUwIzAhMB8wHTAQDA5WZXJzaWNoZXJ0ZS8tcjAJBgcqghQATAQxMAoGCCqGSM49BAMCA0cAMEQCIHuswBIIMTvWRf+b5Pu8nt9mEZ1+Fd8o2B3e2atV2c73AiBpAMFuIY2JICTi5n1Yj6rw94ZLsiEfSJW7mu2eU2Ldaw=="
Enthält das verwendete Signer-Zertifikat als Base64 ASN.1 DER-Encoding. Hier kommt ausnahmsweise NICHT URL-safes Base64-Encoding zum Einsatz!
], "alg" : "BP256R1" -}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ1MDY3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJpUjZaUHhZU19RMXJ4Skgyc1RJNGlEOHFIZUJMc0lNUk90dFh4SmZKTURFIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6IndwcmZpMlY0cFdyZHpGc2JuSDd6ZmJjSWt2U0ZsNWdQIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJHLXVGN3BaZGg3ZExuWS1PSzJVT1hpSkNWZUdtakswaiIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MTkzOTA2MjMsImlhdCI6MTcxOTM5MDQ0MywiY29kZV9jaGFsbGVuZ2UiOiJWWHhGcVZZeHg1THpBTnRBVzM1RVZ1OXZOZjhqX04ybXdHSk9nMXN1OE1ZIiwianRpIjoiNzA4MzA3MDExNzdmYjc3MSJ9.QjvvcDB974QGo_kRINcJqw-miK25slQBxVglx7zy_xpDXFhuc3hZMGdghrr_-TcCsO-24tKEY4ns9dpamijJMg"
Ein verschachtelt enthaltenes JWT
-}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
+}

body.signed_challenge.body.njwt.content.header.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM2MTcxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJIdF93OEl3akYzLWFwYmFmMGdNdE12VkJCVGljakdQZE9zbUdFS2xsWnVvIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6Inptbk1ZcldpVzlZX1k0b2xMLWt0SGhuYlpPUkxhZmc3IiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJRR2N2Z3FHTlZrWGpJTk1xYm9DV0ZENG5jQjR5dHN3RyIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MjIzNDA2OTcsImlhdCI6MTcyMjM0MDUxNywiY29kZV9jaGFsbGVuZ2UiOiJzMUJMMjJwRjJwN3VBakp6QzMtT2RsTDhwWUF3VjhPekNLRk42UmNwbWZJIiwianRpIjoiOWFhMTc0MTJiYWYwZjAwMSJ9.Psn3fXLretNwLo7rjcNqEsEdB6SQ_lc4XVqYJPtaBhsgkpwdVy-56sthaim652DiNpRtjEdyiVEJUEZ5LIff6g"
Ein verschachtelt enthaltenes JWT
+}

body.signed_challenge.body.njwt.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:45067",
+}

Body

{
+  "iss" : "http://localhost:36171",
   "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" : "iR6ZPxYS_Q1rxJH2sTI4iD8qHeBLsIMROttXxJfJMDE",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "Ht_w8IwjF3-apbaf0gMtMvVBBTicjGPdOsmGEKllZuo",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP",
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.
+ "nonce" : "zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7",
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.
- "state" : "G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "QGcvgqGNVkXjINMqboCWFD4ncB4ytswG",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390623,
Gültigkeit des Tokens
- "iat" : 1719390443,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "VXxFqVYxx5LzANtAW35EVu9vNf8j_N2mwGJOg1su8MY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "70830701177fb771"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key 965736952618175

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key 965736952618175

Encryption info

Was decrypted using Key prk_idp_enc

Hierbei handelt es sich um das signierte und verschlüsselte "CHALLENGE_TOKEN".

22302localhost:45067127.0.0.1:-1

22302localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
0
Date
Wed, 26 Jun 2024 08:27:24 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&Optional[ssotoken]=<SSO-Token in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
&state=G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
+Date: Tue, 30 Jul 2024 11:55:18 GMT
+Location: http://redirect.gematik.de/erezept?code=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDU3OH0..zuF7Ay1Uf071C8Pb.XBkodw-JTbUhGURjW7Y9NdCokKyH3wLmGQ9FolZRstwhtTTXqT9NLZKgAPYYkhyiUoeevHWY0AVjvWpS-WMrwzvMGsjIS_J3NZ0ppsk-dXFMEL1rqHlcqlUEzwsbKCYHXBmCgURFHvDoxyGOcxyfPKfD4KnngCTj9KVhvrfU-0IHgW2WVrcbWcbm9koenKDPms6X3io9qVzfX8GfdoiceS3B8kAByTg8Ul_-ZIB4atq_VksJROLvODw8_2I7BCNll52DSE4O4e8LMRrggJhPsCyH4hzzMODvz5TX8eTA5ATWhe-wjqPpy3koiuj2_3zpQSNCdh-gXxvyOp_KUA5iQP0DAPBuFRDbAVxLWBB4gYjKbQz2Zx36hoDjgF6bZCNGxltw-ZquAgkB-EB7IZ-6VX_hPsCabs5V1WBn9kZgCIxT8R6EvtRXcBMeOF21kfvd0B04yZMLxDICWDK-po9u16mFQQ1t3Wvu-75iLtZW3NI0xp8iWLfalgPifRSSuQfNIXuGgPHQObblubLVkD-f21sWCepFKDbkmCh32wZZ792jcwXtNZssIBLFaG2g5cUjnIKcc-uVjw9nalbQJ3rcou2zzYyZvbXFO5PqB7Ja5peYcjNRPGiIQ3qoUa5V_qR1HRSWecNpBIz1_tWe7r0GtacZoguwDW0wLZwSGpYdh2dScoJrf0OoibOR2tTv5JQvpkLHxdwwW6KpE-t4_i4w35Z9GvGB4UmLkfgQ8GDbJP3P0Smovw0TkSNI16VxJNxKDd2-xT5iw1uGvSGveVEg63zBAsh3Y7ln86AVUoWnnBFs8rdNcc0SiRfonaUqo86Q6gYyU9UUx-t1vsrukkObwaCPWxgkNo5HmmsVrHORtTFfvpszmE_iw21utAclMMMpBvTVMHJhRRD1FfjExtWVveoscd0JECKsWGwtjwe2WB1oFjhzQb4LWy5MQcLoLulH4VsLUFDMsTvZwShikbSx7O219lInpatt9Lar9EmDK8_wT-TAlpXsN0HCfCwmy1OoQHHOthYKXMz8wscIAHHN3xNQVp7Sx1-PSmMKJlvjCQfbH1gemGfhjtcLocCpTVk8vfTCFJveNZQ_VzNBzSdgnly3AkrA4pU_3QRch6Y3-1WJBVGBE9QIWcO-jjAkYV9hzbltlnHLnjxrHxdgpI6GokgNaAVJRB_9RLHROuJ5ML7VkEUBFB7UT7MWPYQ9gfc84oXd_-9cpw66qi0LTD8LAoEIlZExSB-R8cxTb6s8CiuoaaradXGgA48RD5FKjZGZFR3hbgeT9gmR-zDVhzv4zSFhJOioGyyJkbog86be2KfM1F8lAhobri5LHPyWwWw5NV1AELoKBnCGNNMzhamrX109JXa8ofSxH1Dpo-2Sjg-o1c39zXcFNpwkbuY7UmACZW8iI5q08-Yr.i_JmgIyB5cT4K9Kru3cs4w&ssotoken=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM4MzcxOH0..dqOeAGL-T5pxwhJu.nAR9uwzkk0nL6gMRA3paHMGQkURGWpHhOm6TbF-LE1G3ln3LrjZKn2GGFwdVt2ROiFGqvc0Rx5eBwjeKx2Nxw0f6WsHt7B1u8QS6FIbsKAs4Kj1cF1PEUzxkpYcXlPGWhHc_2J-NBrePcWg_JCwzVni1IPljzLrJg9xqXvlLT47ONB8w9lGXhDyCCFTFBV5DW_Pgc7yt2m28ia26h2vfLd9Nk0ZziIjfZCOJ9Ll3TU6wVmDjgztB9D2NGa3H-FuLX5uGFESv-3X1JZ0-1o7lWA9rlxcmTyZt3pez2b0Xltbp0ou6X1qYzuSYg-eWFZOhI-7vpP59a3SEeEJjWwB6SlxyMqn-BfNAU9LCSUP86lH5kNKYPAfgB-Z2IYcqg0IS7BfnJeluZGSFf5cX056jBlODs-jR-ZgpErF9RJjmrzI0_Kgt5tiuUF3cfZvNBRnqYxrsMvZzWucHno8XoTumj9OfyEXBxUm_oo33yKjlDLrg0JToYNAyppGYrL1FoXPTuyy9WSKgr5xW3teqWCJ1WH3SilDgPHCOD1HspJhCVCV4gAEqKfOh2kR0tjHTL8JIrQg6jqLW0rOeRgXgmWpm5JzfEEOtGuSdsY-4uz2SpzCnFhHER09AZ-Dj-lEVZhbcrPFZ9Cr0BvFuKtXhlYUoc0czmJKmGMLoqrh_Q9zWXLvM1uwQ35gyxfXVHQRy3ns-vcYn1MmxigMrBfJ1o-Lx3pKAFB3K41x0whYN1bt6eiiQUjfRA04MVJXwRqgFHrcvBB4vRHwl8tYLupNajz7JELi_11g194W6GAbAwwZxXq7TI7XyDXdjbWd8Fv7bg3Fh4xX_r2T0-jKm6tk1u5Cgc83vlrUkpu58kcPXG3er-DLNR6J7a7yZxPPaAUAb1r5wvFjJO1rq4l-CuWjnAtImSXmJtB2zi9KguLQ1T5we4FUXXtX_M3OGIOyZdO2_Jum-SHEKwKaHGiRDFSWURduMhgixK4h0wN9AVfH86FudPuaVS8c01evR9iTlpBcEYsZs5Nc2dDHjcsIS8RevV1e5-ROv-MJVaM6E1u54YQ3s1FT0brdfxf1QQgegvf-eXVji4GOSjbFZdhAVHC5V3Tu7DYy86Qd3mImkNKpF7dP0JeF1VAx9ZpMND6pX9X_ARdMtrL96osGMzEdVeIh-o_898TczKrdafdJ5zxCHJPC-pLl-latR5XkDSaE-8l9U32HizwqL07sjJfkzKiyiLbqy2h9arZMroX1pv0kx2Hh1rvFVwczDBSQ7br9xPWw37kUvcave-vtPQCFRDuZmE86zWXg0gY-dZhU6Mar-8AEDwV0ieSxV3qbtfd4CBLZOZf6Vv1H2A8MWFhNkLtO1sffgTCor6D6rnOBDuS-qzcC_Tivyqemj7p-6I2oM8J9pUpB9ahLzCL701x59pW8ps_0nVBqGQgDj_2UOAC3JSBd_3PKlyC-RuYgvtIk7--XKHRAIjJSTPbvsj91qukPQ7M0zqllUAjeXNhcnYha07NftLP5uqTWOAjvuUOoC7LodCGrGm0-O5ebhLhCH06Zl6Dylh1FhwvmKoDL-rILQGwvSUS78M01i5F1cr_VBYWsW1WHVeSkPGtbeFcBtuP1ZLwCC41XEGukc-pDvH-O59ET_Q1SxKmgl-QWCQmzDnRz_IosphQPPRDsdHIXvK67V2NPAJz1aHggl_1RzRmM8ng2xOhqqTK_7mDFWWIcwNhVdLX7ZB8WByNCTQnO6XKZtDPxnuZ4AYrGMnF0NP-OVGBUoZj9GAGN_D9AJ2dGzgXcI2TxB2UCrrCrS-IFNDOrl5RMwyED1bB_CEi29vfRqRp26txgZy1pqmWtJ1bmJeTUQW7c0xlnLX1i4nNapMpWfB1ry7iphlxjilCPrIAzg5_AY1VnVTndATGfn_SLk8jya-vPWmZ6lQCNpWnAHE3tYXUaqtyP3Bbhd99prPWHswzvV48LfAkrBrcQ3s5W3p3SqunipRu3WE5GrqO4E2Auyvqq_QFWv0GjOjKUGza8e7t-cQQyDSqgQ9ymR_mGnVXzWTzInFEO5MMqRrD1fgsK_GKWQHn244IpHvEMow8nwc6ZYKMB0ri_A6nDgVIo7N94XTgGl8IxGVcqVSG2h65DdGPoCtb6cW--Du-hgSQSYqzLax1E_hGNtfLkeWrtoAnuqzi2vr0W45SdS2UYVzumN7qKOHhenc4S62qwzgIwj2dgq42vMotoVMigDGabyG_uTW-0rxfwc69dUYPkPcHynOnvkM_ut2huLsVIbJSwF1qNoVjT_7ioK-xeTW4kcbuOfgp-5v7-VfmDgAo47NoPXawVClbMUuVoZbVhX-t_AuvhpEe3hIO1bjMFWDzCKGbQ0BPpuIAS3aJEsaSC-53QOarYY5NTxUaWX5phf4fvhuUmq3Rdew6LjOPlPMEpRvZ0JYeskcJw-78QE5o-XFe-iYz1KFWcUoh55x9Ct89FHxx0S3Jl-zgc4NMRQWEkjhjqnumH_Yf-0AtG7XaP8h10FYkdyIUbntp1z1IC1eKajW8MiGYONb1sqgwr6l9yzffynHHSOyB2PMg4nS4RxlnC5S_ZELPtGRtz4r-mS8gKABU9Iin7U99rBTVB7KCT281m2dVwVVkL19wIpOjVVQm_OEkUHi7pvX4iCpfiuxBrWptrTlSSlEU3DXBTlo5UObVHojyKLPnZyPmEWO130dw0sRf3Pqx02kmI73JvqytUHG7dtgcBQsQcnhCLSyo8vSj6oBEuZuohOrSEJETh5guuz406evJPPc51Rw9xPlP6w7YZduL5pHMO7725kQFHaRMjIU2voMyXnd06e2F4Rd4kszrLZ9ufYUKYFyBwVhdDMEcs5n2c5aqpk8WIH1-WUM5iyhfpVOmilM2D0r8VJOpUE3tfSIdozc_zWGOHuGgyFAIInF4Y6AS-hl3-Dd0VYLuujQirYjQ3vZrh83hwhQtlaIIjlG3NLngCRpvdIWItVURihwzX8qyP0P1HowCSuriVjPsIBNre6r_rqpHj99ifhOSvuDQfP59xkDzdGaZIYPZb_6pryRn0F.K7nMGeNFeOYvhYSb9em72g&state=QGcvgqGNVkXjINMqboCWFD4ncB4ytswG

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
0
Date
Tue, 30 Jul 2024 11:55:18 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&Optional[ssotoken]=<SSO-Token in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
&state=QGcvgqGNVkXjINMqboCWFD4ncB4ytswG
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390504
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NTA2NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoienlUeDFncjczYlFCNHFpYnplcjdFVTlLTWh2RHYxaFgiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoid3ByZmkyVjRwV3JkekZzYm5IN3pmYmNJa3ZTRmw1Z1AiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NDQsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IkctdUY3cFpkaDdkTG5ZLU9LMlVPWGlKQ1ZlR21qSzBqIiwiZXhwIjoxNzE5MzkwNTA0LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQ0NCwiY29kZV9jaGFsbGVuZ2UiOiJWWHhGcVZZeHg1THpBTnRBVzM1RVZ1OXZOZjhqX04ybXdHSk9nMXN1OE1ZIiwianRpIjoiMWY2YjA2MjkzNTY2ZmNiNSJ9.PqOpL7D9vk9KtsMWof-FrX3CRDfc7M5MB4z3AudyEM-I8f5_pNuY1H5lagurXzfgcvZubeW04TV9PEeTFaqrkg"
Ein verschachtelt enthaltenes JWT
-}

header.Location.code.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340578
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjE3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiOHVNMWNSYlYxS0cyc2pvTVpkYzRJaU9LZmtaMThQeTYiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiem1uTVlyV2lXOVlfWTRvbEwta3RIaG5iWk9STGFmZzciLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA1MTgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlFHY3ZncUdOVmtYaklOTXFib0NXRkQ0bmNCNHl0c3dHIiwiZXhwIjoxNzIyMzQwNTc4LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDUxOCwiY29kZV9jaGFsbGVuZ2UiOiJzMUJMMjJwRjJwN3VBakp6QzMtT2RsTDhwWUF3VjhPekNLRk42UmNwbWZJIiwianRpIjoiMzg3ODI1Y2Q1YjE4NTRhOSJ9.KKytj1ZrOs3YbdhgZO6AO0ysG3D5vmDUDY4_b_zVOo1IygA2Vo4_cEyzdBalMEVHRMHq5lTruQA9TGC8yApLWg"
Ein verschachtelt enthaltenes JWT
+}

header.Location.code.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:45067",
+  "iss" : "http://localhost:36171",
   "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" : "zyTx1gr73bQB4qibzer7EU9KMhvDv1hX",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "8uM1cRbV1KG2sjoMZdc4IiOKfkZ18Py6",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP",
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.
+ "nonce" : "zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7",
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" : 1719390444,
Timestamp der Authentisierung
+ "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" : 1722340518,
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" : "G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390504,
Gültigkeit des Tokens
+ "state" : "QGcvgqGNVkXjINMqboCWFD4ncB4ytswG",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340578,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390444,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "VXxFqVYxx5LzANtAW35EVu9vNf8j_N2mwGJOg1su8MY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "1f6b06293566fcb5"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

header.Location.ssotoken.value

JWE

Headers
{
+  "iat" : 1722340518,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "s1BL22pF2p7uAjJzC3-OdlL8pYAwV8OzCKFN6RcpmfI",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "387825cd5b1854a9"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

header.Location.ssotoken.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719433644
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NDQsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzE5NDMzNjQ0LCJpYXQiOjE3MTkzOTA0NDQsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.UV8Qj11_4gzqz4SwMsclNCOqjk-Nkd0NlWE_OpNus5t1HKtG0tGj0YeMXKsCuD5qvYJ2eoh_i2YQYpQHTFwKGA"
Ein verschachtelt enthaltenes JWT
-}

header.Location.ssotoken.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722383718
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MjIzNDA1MTgsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzIyMzgzNzE4LCJpYXQiOjE3MjIzNDA1MTgsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.chehfj5fI0IHw2ORspn7Kmkky-St2vpq40qW-jX16uFqxFTX-YVmWHvoHd6QLulwS-N9dTa759SRPcBYxadUTw"
Ein verschachtelt enthaltenes JWT
+}

header.Location.ssotoken.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
-  "auth_time" : 1719390444,
Timestamp der Authentisierung
+ "auth_time" : 1722340518,
Timestamp der Authentisierung
"amr" : [ "mfa", "sc", "pin" ], "idNummer" : "X110411675", "iss" : "https://idp.dev.gematik.solutions", @@ -735,99 +735,99 @@ "y" : "lgJUXP3xPwcoT3PyDi5ILGmZmyrjUIYXqROD0OKrWA0"
Y-Koordinate des öffentlichen Punkts des Schlüssels
}, "given_name" : "Darius Michael Brian Ubbo", - "exp" : 1719433644,
Gültigkeit des Tokens
- "iat" : 1719390444,
Zeitpunkt der Ausstellung des Tokens
+ "exp" : 1722383718,
Gültigkeit des Tokens
+ "iat" : 1722340518,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld" -}

header.Location.ssotoken.value.body.njwt.content.body.cnf.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

23 POST http://localhost:43371/token127.0.0.1:-1localhost:45067

23 POST http://localhost:35601/token127.0.0.1:-1localhost:36171

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2111

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde

Headers
{
+content-length: 2111

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2111

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

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" : 1719390504
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo0NTA2NyIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoienlUeDFncjczYlFCNHFpYnplcjdFVTlLTWh2RHYxaFgiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoid3ByZmkyVjRwV3JkekZzYm5IN3pmYmNJa3ZTRmw1Z1AiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJvcGVuaWQgZS1yZXplcHQiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NDQsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IkctdUY3cFpkaDdkTG5ZLU9LMlVPWGlKQ1ZlR21qSzBqIiwiZXhwIjoxNzE5MzkwNTA0LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQ0NCwiY29kZV9jaGFsbGVuZ2UiOiJWWHhGcVZZeHg1THpBTnRBVzM1RVZ1OXZOZjhqX04ybXdHSk9nMXN1OE1ZIiwianRpIjoiMWY2YjA2MjkzNTY2ZmNiNSJ9.PqOpL7D9vk9KtsMWof-FrX3CRDfc7M5MB4z3AudyEM-I8f5_pNuY1H5lagurXzfgcvZubeW04TV9PEeTFaqrkg"
Ein verschachtelt enthaltenes JWT
-}

body.code.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340578
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDozNjE3MSIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic25jIjoiOHVNMWNSYlYxS0cyc2pvTVpkYzRJaU9LZmtaMThQeTYiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiOiJTMjU2IiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJ0b2tlbl90eXBlIjoiY29kZSIsIm5vbmNlIjoiem1uTVlyV2lXOVlfWTRvbEwta3RIaG5iWk9STGFmZzciLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwic2NvcGUiOiJlLXJlemVwdCBvcGVuaWQiLCJhdXRoX3RpbWUiOjE3MjIzNDA1MTgsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJzdGF0ZSI6IlFHY3ZncUdOVmtYaklOTXFib0NXRkQ0bmNCNHl0c3dHIiwiZXhwIjoxNzIyMzQwNTc4LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDUxOCwiY29kZV9jaGFsbGVuZ2UiOiJzMUJMMjJwRjJwN3VBakp6QzMtT2RsTDhwWUF3VjhPekNLRk42UmNwbWZJIiwianRpIjoiMzg3ODI1Y2Q1YjE4NTRhOSJ9.KKytj1ZrOs3YbdhgZO6AO0ysG3D5vmDUDY4_b_zVOo1IygA2Vo4_cEyzdBalMEVHRMHq5lTruQA9TGC8yApLWg"
Ein verschachtelt enthaltenes JWT
+}

body.code.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
   "amr" : [ "mfa", "sc", "pin" ],
-  "iss" : "http://localhost:45067",
+  "iss" : "http://localhost:36171",
   "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" : "zyTx1gr73bQB4qibzer7EU9KMhvDv1hX",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "8uM1cRbV1KG2sjoMZdc4IiOKfkZ18Py6",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP",
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.
+ "nonce" : "zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7",
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" : 1719390444,
Timestamp der Authentisierung
+ "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" : 1722340518,
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" : "G-uF7pZdh7dLnY-OK2UOXiJCVeGmjK0j",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719390504,
Gültigkeit des Tokens
+ "state" : "QGcvgqGNVkXjINMqboCWFD4ncB4ytswG",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722340578,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390444,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "VXxFqVYxx5LzANtAW35EVu9vNf8j_N2mwGJOg1su8MY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "1f6b06293566fcb5"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt.
{
+  "iat" : 1722340518,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "s1BL22pF2p7uAjJzC3-OdlL8pYAwV8OzCKFN6RcpmfI",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "387825cd5b1854a9"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
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" : "VABw4p7Lg-rl0e7jVMiVj3AeumxJ-KEy-HxroaDAc9g",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "e2xKXBLBp9toggYR_skM36DMwD3A5C_0KUEXsj9dGCw",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "OIwmMrK0ZBMqsZJn4IJR28lGfH1Tzpk5KPqMIrD4vNU",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "l4v6d_hWKzS27ws2Sv0asXq2hNOf5FNQJHs0ObR8mMY",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body
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).

{
+}

Body
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" : "YiWTMLyW-kMXbphioZ7lbjUnNf2f9Ne7OlGbznHHvsQ", - "code_verifier" : "kuThSljQ5wRp3nGzsyP3Ymg8xCgf6tyGpxoboc_sQko" -}

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

24200localhost:45067127.0.0.1:-1

24200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:32 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+Date: Tue, 30 Jul 2024 11:55:28 GMT
+Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:28 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "expires_in" : 300,
   "token_type" : "Bearer",
-  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc1Mn0..ERWQbZqwaEnKYGQ_._rNGFyUmEkPf6IYuseEDpb-P-k82wICKrpac5pWhDAyAjmDIl8GVsUoHWz_jDMg_Bsk9G1JX3iydz8pfF4JfMAhq0gRWZXB2-BrZUGwRaJ-Hb1VQveoUL70xxAAh86-KsSkWMJj2zArSsq3xBarGg_VVJn4f5Dx1yW3cznoM2VJVML1qWl8nKvOGUFHeeZKctHXFD2j0Q8RrH-eVdAnAbIMmFJE4EGr3XTLuQteAmMRY70TMspBSdMEkBGxs5bkoet9RaF7eZ3WZsjYTRD_KsgT-6XXIl_VGx03SfmeyxFmjRflzTTrBaw1BOpelYlDMlL-Kz8AUuNQibe2BNUPcrTA5YJmmEGLMzMIzF6mHijE3_YQSz4TOemErZjBqOvJr8Oqp1GDIruFhF2USEjvQLggIkTjzCmM58h8CvMi7l3cUdJu-ESZSrxfFS8wygCqmZt3iuEllF9XW3ZG5QEcyZD00dEATsQ6LE-a5r73rEs9ITuR5G_hnXDGGy5eYL2Osm8BGsMO2nIpSSMz3duxL36Ul1aD_BOWHrsrqJaskRwPc9gw9wyQkLt0yYpCFD3-ndfDGv7FCYwGdks6bcCYOU_vPL3P3sltukNO4SFo2nFgrH4CA47RtEzBix_1RVnFDiv1EC42YFrzPQ1SCGRSHMRlZcMhGQwSI0yNnKXdLAbvbnmXtKuWv81321vMY2XGVSMFBWPkbZ4JWr2rZ7jgQf0ZFn3045tg9t7X6oQqU5uHqKo7IcYQWcNXUJt-sbE6RD-PSRD4qNRgyAPCTnFYDUXtb5AR-ulP2VBN4oHnD8D_JI5d8tqYQ689LEkbNaJlAB7mapHj69HDj2Lb4CJAApf-VMZP8Jd9ghKQ5RtwIDKl4bEJuYwnnJAmmCvTwCeu8HTAv8k07Td3q4rLfHxA-zDEfvbS_9S7GAdsef5bImJNhoAbty0ylKOen2MXWBTkWHwmurnyv4D82OqT1vgVsk2VIp2ZnAKI3GsLwyv3Ntza_-v-5AoYgO_du5YMdibP7Kp1Ein_jcQm9PVfKFPl1bFKfrnoncJ6BZAjp2fznc77FGzcV2v7W2DWHOC4BT13yjH55NY7brbOO-OZjK4wT0WwkCgU1DlH5cNM8PtVOuRTV1Efos8ui5NwgofBXjN3l84MxKHfiCc6CIYHWFm9bL9Bxptea4ozFuBFac8TeQcUrl8XV9_rb9QjHpfGUuTYcD3aD4ic1ocFZVG1l5Y74xf0.GwiL52k-H8X0YjaOKirfUA",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
- "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc1Mn0..-54uoGDLUdx1K8Es.mTyOOgOlemr9sAAml77AGwWsDqNe3mffMV0gCGMqTpIk3-lGC82taQWJq75rklbUgfom90wEPJy43faVCW6wNd10Ic9M4nCTct52NIA6PavIXeMO77ThSzzX8hdhudE7DR3dWvIucOnC9Snk_f3t8umbDtPDsUTskKM4I23ZTfPQHk4HG65EqWEsDiN9jgYFUUUEIBDjrRNA1zoeEigM_I9Q8pFEhHLS2bleWg-B8f1QOODTmtYRVGMHrS9z21jI_EUrPJ2yhjsrVuNIUC0iXZlbOdIbefbH2c8f5DDzj8X_7TZnDm1lpTNJ-eTgnQvdrX77xDfTOotHxXwIhUHfbPxpf-yu783fPTETGYVb-iXg_yqXFLKw95DHp3rok5BshH2ANi5rVShE3XABLv_TkbBxCo9hjz7WE5ds3upW1xc-NNH8ZNE1eauUGejROQSwJ1gCJSE0e00OlYv_QNuH4PjiOciJTH6KgrCRBorjIsR7sWDgb4x0L1HBTcTh3VSaIqoPAX7iMmOpVwIqEc-e3CMo--7pj-Ep3oEr-Dy38hWlXOeME9ttZmnzquEcsVxWT34A3Jej0Ku5abwNX1nE26Olk8WPOnmMvyqlJG7YkqCjDBBAR5rUyiApgH8J51_yayy23ZjvqxFaeDN4l3IZSvgffI_Vfvd7JL7HONeceCF0UaEZxQ_53zZnrahj9Az5HLfhhExBlqRv9BbBxYObJgncId0N-C5_2LXa1Mrqa_WRz0fB1s3emCNG_F4jfASrwa4CoQDs322rxE3PKYFSXc7fK72GIL7HdEFJu0K9qwdoGF6e5PE_H94yqGycwV9cXXexjmb2w1UsFvTMHI0O_KHPf5gf-gd0pMk3oZEr77wB3AxTjuemUNJ7YChLeLsEQZH4d7W4YJtUFm0qzs47fJ8cgaqslXK8gEbIghrJsR7KVIcs9qqQNwSTTPiNPCH4D0VYPb4p4xUBREzrfxFtIR7Pmv290-OelocMNm3V4r932hnLyrBRLJNEDd9kBcNEZ7IEAVa3gssZq4HFBEE-OSoeTifY6POx8VDm0f-kz5SufDGSHX1Hpt3w2KdSIZ6oluD0H57KSsEx59TIXpbwMADzurlVGt0pXd7HUd2g3T5rTuDsT_o44fslzqMKppbVK6x4G_Dl7shMJW_CK_gOWzGOAJMOFX8RMaThK8UwqRLzfflGUaoHMASu9Rdl6h8uPdCOQEorD_7f422lvX84ihmRiAn9ixwwY3FTgQbUynGOh5ECII48kd8.egrtPcPazKE4Y8M55qzxJw"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
-}

body.id_token.content

JWE

Headers
{
+  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgyOH0..mhufTsB6MFNsJGKT.1hjl-xUbND9UzomMNu0YdUwo5OKqWcmTT04VneEy_TXU6NVWjLfGUU4k_fwXxKSq9lIJBsYwgvPz9aBgbDw3CnYEs8lDu2VRSZSkUv0kN76sKCCy4u7OiavC4CCaSifhmg2jdnlgDTUWsBSn3VrS7p5ILSElWZenkftr42bWzDD96pUifrSlD3LYPrrZXXKs_aDD-Tb5KVFvKYjpT18pQJ-0ZmzTA9NLl6Xu4KrxLeb_a5u-GcOBN3eiSLXo4TdXltyCQgoo7_UT-2LhOMRKSfcm9mbfTkF6EbBUXOKRl3aCo7eEN_WRCC3s3V9M4RBfiF1oP73vFKrxnayOxOdV-5x_1NUvObCYM8sWJkjCAUb9dZ67lJ0e2u-g0nCNJD_PsTvg-IN3G0JHKzuIXe7tyav6RWvj71suQuVZDgLZ-HG4Yk39nz7bfueHmMD7GuYBlmC0idhyJf8R8fdLwlKM8Z0v9er-vEoYU_tau7wN55o-njEQqK7UXMB6ajPvlQuRNHRfrrHKuAaiCLnEDCaB4btcvQWze7T_B2gVwIU2RHWO9BlHjRiQztvhj6fUfFkytGEtG_YlvZ_HL7zbZfHL0jUAyFWzeVQYCAT9ib7lImexb5FiRKEZMLv3PJuM5lv8qvCuY2Zi4MLzEvlfyz-qP1TFWNAMMPJidrnOl-QGcpexH6xvtXBy5ITwXxnx0ZqnTZPUvhUu9xaeyavEAUkT0-0cQuLvC-Z2wUQ2tXxui5rUO4ggwhLEsN5w_QlqjarikRCpHyoChsVMfPboqj5-4MKSi2tJ118X-aTmdU6Z9i0lW0F5tAzBqIzmo67sjvc6mlsvsNNkFwvOD3m4BZCD-z0JSmq_fnK93WLlGIzfrSNK6q6OW1NdG8yR1nBEAmHxGgn_Aj4LrjHHImVx3LsXD4JZB_B_Eb9k---R5gqtFbFY1kJ9vtvG7w8b1P520B7-ZSVUCwx1N2I6dSapHOnfqXxWaQYOaoZ27l91s9Q4GbkO4HmsbqIg_sJmUjPRGwHtQFBelKcQyhNZZ8Ze7v4YHcBloUQFzbbSeBMM-NacTZvqb72QXUJky8DDzb4zvHtkxGrKqrxFlnsAqHARRXet0UDAdcBpZK6rUrI4DLNZtQDgShJ59igGFaIbGN3qu_aNIHZswGXwrKgFQIfVPO8IffDDpnkgxdyIlTQ9aqNQU0LF1FZHCg8h5VolX9NRF4Oog2Cg_Ajey6md95hYHLxia58.tRq5bL8QavR2-qFlM2q6Sg",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+ "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgyOH0..5QBS9TwwqzqvI8NZ.rJPsrBWXPuMYTwf6zVX_r7MfcRWt8FgFT1EQlaJRpZxQ-j6xGi-gB4d2tPUCJztwlWVTZ2Q9J8a_6F85g10c7WbTcCm4F8uany4cZoAAE8KOqv3CqO20GZ0yCCHCZpsub75a6gEgrar3lUm8jfYYcdvHk7fD-3xA6Snrkd23kXXbR-sLbh822AcBZ3x2tyBhOEa-DBhf_YAcdsWnCYVTLqIcBDjQIlJJMAM0Z67gZOLLuBh6W_zIPv-GBlAYFxTIPoY6LXDkgf5lMF3sOLSdQHj86lYIVMJQZRPEtMqkI-UfREzd_DMOgt-DYPhPAzMIfu99YrDaGm8jPr2-YBHPY_hnKFNUyglAYrafm33RPuK0uHSqBX1sALqfTsKHR5xvwoPbcgpQO7gPNpa4VvA2uxjvLkJMRxFRUHtsx-uc7zHBQxXwAVHWx3ay8ut_k28F3gKYRNx1QHNNHAAHUZZagNAMHJB_lf9dAy5Nhj1Lgogdd8o11gJ3W_Gu8uIlEOZ5N566NaTxVDqtS5ozYiaBaZDne_cQCbki-SqG9-daedcAkAvwSbmfXtNdIewx2voOHkHP8nPyrud6SPKttk4vSF3XdPG6PXczm0KJXKpwNCRq38AeOkT-8SvEgfugk4UWxYRXwyHWblicHnZm1F7I0MyYSg4r8i6X8D6qRqFDPbbHNnvvZsXIVj80kD3AdkOhTCCC8CT8umIdHoq62vZBdyIMHw8cmszYzlDfCfL0THtsHOnbpz3qzmvfhF4ZBwZzqZwi_1t13X1XKbkM_quLtHRlS4TQJOjYeojyTzfYyCQYH5ArU_EHtA5a9FVnFDmRKBa4kbtFjxgcuXWONn9RY4eDEysOn7jguOUzpLOeFr4gAeS86TxuUlxq7Io4-7PaFhoB1VNoG4PUzDNX6cZG0wHIpH0Nc_C5s9MghGpEHX3yuMcY4iTmPJbwqgMOPt6zCRovVtWEDR5OgoiuS8LsazyCH4GBq0j6WtMYWiQnHThh-ZLTWAGcIJFhhTUwiq3e2atvhMTX-SZr5y4OffkXcNH49SyZXMua7fx9zMfMHK4psKZf273eXzRUQAqBc549gdNgkjPa72Wzi-3UIniC7veutLH7X3qzaxhWWpuHBrFNd-UyX4uoFDAbEpCA2F1kAcHmXiQplADIZE_egQ0Fk9wxvh851gDoEwUP8ST96wFGhRwcD-hcP0OTd6YRnAJKf2wqqbKQ_sOIooAEfH4mqk7yNJHZAnOnjlDOjsLEMzEbshOmYN8LkVE.FxObeP4OjCnr5-FmtA6B_g"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+}

body.id_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390752
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiVmZ2cnAyT3RtLU9IMkFuREFlVHE5QSIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoid3ByZmkyVjRwV3JkekZzYm5IN3pmYmNJa3ZTRmw1Z1AiLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcxOTM5MDQ0NCwiZXhwIjoxNzE5MzkwNzUyLCJpYXQiOjE3MTkzOTA0NTIsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiNDQ3NTZiMTRlM2ZjNjA1YyJ9.QY0pwNUs1TmUjtTKIXX1-TVm44KzfBroDwwCQbtnxmEuIItrDLVzp-JgQxX019yXNRaENf1b4TtpA47ynyqO6w"
Ein verschachtelt enthaltenes JWT
-}

body.id_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340828
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiNkFDTko0V2MxdmJOT1gwblNhVmt3ZyIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoiem1uTVlyV2lXOVlfWTRvbEwta3RIaG5iWk9STGFmZzciLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcyMjM0MDUxOCwiZXhwIjoxNzIyMzQwODI4LCJpYXQiOjE3MjIzNDA1MjgsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiZWE2OGUyMjYxMzdhNWE3NCJ9.h2uPX9tcewWAKh2AY3TIbk0RyAOIe5XaVVZdEFkRxuqRHISWBqDajvFoQ2YbrNTC4Tua7DHbVEIYDY0P_kQ54w"
Ein verschachtelt enthaltenes JWT
+}

body.id_token.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "at_hash" : "Vfvrp2Otm-OH2AnDAeTq9A",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
+}

Body

{
+  "at_hash" : "6ACNJ4Wc1vbNOX0nSaVkwg",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
"sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"organizationName" : "Test GKV-SVNOT-VALID", "professionOID" : "1.2.276.0.76.4.49", @@ -836,27 +836,27 @@ "iss" : "https://idp.dev.gematik.solutions", "given_name" : "Darius Michael Brian Ubbo", "display_name" : "Darius Michael Brian Ubbo Bödefeld", - "nonce" : "wprfi2V4pWrdzFsbnH7zfbcIkvSFl5gP",
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.
+ "nonce" : "zmnMYrWiW9Y_Y4olL-ktHhnbZORLafg7",
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.
"aud" : "eRezeptApp", "acr" : "gematik-ehealth-loa-high", "azp" : "eRezeptApp", - "auth_time" : 1719390444,
Timestamp der Authentisierung
- "exp" : 1719390752,
Gültigkeit des Tokens
- "iat" : 1719390452,
Zeitpunkt der Ausstellung des Tokens
+ "auth_time" : 1722340518,
Timestamp der Authentisierung
+ "exp" : 1722340828,
Gültigkeit des Tokens
+ "iat" : 1722340528,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld", - "jti" : "44756b14e3fc605c"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
+  "jti" : "ea68e226137a5a74"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390752
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTcxOTM5MDQ0NCwiZXhwIjoxNzE5MzkwNzUyLCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQ1MiwianRpIjoiMTcxMWVkNjUyZGJiNzVhMiJ9.RRV-tvIw391e6y03TOPXao5aczjwyvfLCfTRp8Sa5wspO2hNFxxna_D8TErVCuBXMDZUsIUKXWl-tZNCP3pE5Q"
Ein verschachtelt enthaltenes JWT
-}

body.access_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340828
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTcyMjM0MDUxOCwiZXhwIjoxNzIyMzQwODI4LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDUyOCwianRpIjoiMjQ4MGFlOGQ2NmNmZmM1MiJ9.P2UOGP0IwJhcgCCDyecxm8DxAIwlDf0QQmWghpd0AYUbOhvndG2AOsm1ZnUVRt8eWQzLqL1GtHGCSMuAVyfiZg"
Ein verschachtelt enthaltenes JWT
+}

body.access_token.content.body.njwt.content

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "at+JWT",
   "kid" : "puk_idp_sig"
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
-}

Body

{
+}

Body

{
   "sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"professionOID" : "1.2.276.0.76.4.49", "organizationName" : "Test GKV-SVNOT-VALID", @@ -869,34 +869,34 @@ "acr" : "gematik-ehealth-loa-high", "aud" : "https://erp-test.zentral.erp.splitdns.ti-dienste.de/", "azp" : "eRezeptApp", - "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" : 1719390444,
Timestamp der Authentisierung
- "exp" : 1719390752,
Gültigkeit des Tokens
+ "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" : 1722340518,
Timestamp der Authentisierung
+ "exp" : 1722340828,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390452,
Zeitpunkt der Ausstellung des Tokens
- "jti" : "1711ed652dbb75a2"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

25 GET http://localhost:43371/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9&code_challenge=tisnEabT6Mu9i0jdSxfjBJVjB5a-pEIwE543lNk-llY&code_challenge_method=S256&scope=openid+e-rezept&nonce=dvVItjnRRalmgSR78YmZR5Et6JUP6DAL127.0.0.1:-1localhost:45067

25 GET http://localhost:35601/sign_response?client_id=eRezeptApp&response_type=code&redirect_uri=http%3A%2F%2Fredirect.gematik.de%2Ferezept&state=MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i&code_challenge=eIactY_eEQ0hRQkD3dPQoLDWSIS8tvML0Q15utpIZ0E&code_challenge_method=S256&scope=e-rezept+openid&nonce=maBlkyLTP7yadyT09Ilopo2IfqFPynMe127.0.0.1:-1localhost:36171

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

REQ Headers

accept
application/json
accept-encoding
gzip
user-agent
IdP-Client
Empty body

26200localhost:45067127.0.0.1:-1

26200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:35 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
-  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ1MDY3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiIxOVpZRFpxSmZsMTRNcURVNTR3R2dtcHBlendueHVMQURHQlJzd2txOFJNIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6ImR2Vkl0am5SUmFsbWdTUjc4WW1aUjVFdDZKVVA2REFMIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoib3BlbmlkIGUtcmV6ZXB0Iiwic3RhdGUiOiJnYnp5RnpVSmZiUTUtUVRId1lqeWNoOE9zSHJTSTdrOSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MTkzOTA2MzUsImlhdCI6MTcxOTM5MDQ1NSwiY29kZV9jaGFsbGVuZ2UiOiJ0aXNuRWFiVDZNdTlpMGpkU3hmakJKVmpCNWEtcEVJd0U1NDNsTmstbGxZIiwianRpIjoiY2NlZTliZDI5Y2NjNDdlZSJ9.YYGm4r5fDuPTT7Fl2s39TB3Jo3lLCRJQdXGHiHrhu8ZZiXkRop0CJJP8fl4Wvw6N-5PMQcH9V36bgQ97ssPs2A",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
+Date: Tue, 30 Jul 2024 11:55:31 GMT +Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:31 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+  "challenge" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM2MTcxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJ5cmExUHk5MkxRVjI1ZXNsRnYxQVFQazloaEdONmtYcXVSdTNoLUpZaHVnIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInRva2VuX3R5cGUiOiJjaGFsbGVuZ2UiLCJub25jZSI6Im1hQmxreUxUUDd5YWR5VDA5SWxvcG8ySWZxRlB5bk1lIiwiY2xpZW50X2lkIjoiZVJlemVwdEFwcCIsInNjb3BlIjoiZS1yZXplcHQgb3BlbmlkIiwic3RhdGUiOiJNdFpPQ2lpQzRPN0w4akk3d2pZRWhTM2NzaHotaEUzaSIsInJlZGlyZWN0X3VyaSI6Imh0dHA6Ly9yZWRpcmVjdC5nZW1hdGlrLmRlL2VyZXplcHQiLCJleHAiOjE3MjIzNDA3MTEsImlhdCI6MTcyMjM0MDUzMSwiY29kZV9jaGFsbGVuZ2UiOiJlSWFjdFlfZUVRMGhSUWtEM2RQUW9MRFdTSVM4dHZNTDBRMTV1dHBJWjBFIiwianRpIjoiMGYyMDAwNTI1N2ZjYTU4MCJ9.BbFZmEAm5GFE5jijPTpru_V1wqcz_cNDBZEug_LRXAkSW0p-vOUaPczb3ipDO3RFpt-vt4byTNWZ8N2ZBDlZ7g",
Die vom Client mittels der eGK bzw. SMC-B zu signierende Challenge besteht aus einem Base64-codierten Challenge-Token.
"user_consent" : { "requested_scopes" : { "e-rezept" : "Zugriff auf die E-Rezept-Funktionalität.", @@ -911,51 +911,51 @@ "family_name" : "Zustimmung zur Verarbeitung des Nachnamens" } } -}

body.challenge.content

JWT

Headers
{
+}

body.challenge.content

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:45067",
+}

Body

{
+  "iss" : "http://localhost:36171",
   "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" : "19ZYDZqJfl14MqDU54wGgmppezwnxuLADGBRswkq8RM",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "yra1Py92LQV25eslFv1AQPk9hhGN6kXquRu3h-JYhug",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "dvVItjnRRalmgSR78YmZR5Et6JUP6DAL",
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.
+ "nonce" : "maBlkyLTP7yadyT09Ilopo2IfqFPynMe",
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.
- "state" : "gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390635,
Gültigkeit des Tokens
- "iat" : 1719390455,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "tisnEabT6Mu9i0jdSxfjBJVjB5a-pEIwE543lNk-llY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "ccee9bd29ccc47ee"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key puk_idp_sig

27 POST http://localhost:43371/sso_response127.0.0.1:-1localhost:45067

27 POST http://localhost:35601/sso_response127.0.0.1:-1localhost:36171

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3992

REQ Body

namevalue
ssotoken

JWE

Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.

Headers
{
+content-length: 3992

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
3992

REQ Body

namevalue
ssotoken

JWE

Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719433644
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MTkzOTA0NDQsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzE5NDMzNjQ0LCJpYXQiOjE3MTkzOTA0NDQsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.UV8Qj11_4gzqz4SwMsclNCOqjk-Nkd0NlWE_OpNus5t1HKtG0tGj0YeMXKsCuD5qvYJ2eoh_i2YQYpQHTFwKGA"
Ein verschachtelt enthaltenes JWT
-}

body.ssotoken.body.njwt.content

JWT

Headers
{
+  "exp" : 1722383718
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJhdXRoX3RpbWUiOjE3MjIzNDA1MTgsImFtciI6WyJtZmEiLCJzYyIsInBpbiJdLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwczovL2lkcC5kZXYuZ2VtYXRpay5zb2x1dGlvbnMiLCJjbmYiOnsieDVjIjpbIk1JSURTekNDQXZLZ0F3SUJBZ0lIQTI1VktBSGN2ekFLQmdncWhrak9QUVFEQWpDQmxqRUxNQWtHQTFVRUJoTUNSRVV4SHpBZEJnTlZCQW9NRm1kbGJXRjBhV3NnUjIxaVNDQk9UMVF0VmtGTVNVUXhSVEJEQmdOVkJBc01QRVZzWld0MGNtOXVhWE5qYUdVZ1IyVnpkVzVrYUdWcGRITnJZWEowWlMxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWZNQjBHQTFVRUF3d1dSMFZOTGtWSFN5MURRVEV3SUZSRlUxUXRUMDVNV1RBZUZ3MHlNakV4TWpRd01EQXdNREJhRncweU5UQTFNVGt5TXpVNU5UbGFNSUhPTVFzd0NRWURWUVFHRXdKRVJURWRNQnNHQTFVRUNnd1VWR1Z6ZENCSFMxWXRVMVpPVDFRdFZrRk1TVVF4RXpBUkJnTlZCQXNNQ2xneE1UQTBNVEUyTnpVeEVqQVFCZ05WQkFzTUNURXdPVFV3TURrMk9URVNNQkFHQTFVRUJBd0pRc08yWkdWbVpXeGtNU0l3SUFZRFZRUXFEQmxFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZNVDh3UFFZRFZRUURERFpFWVhKcGRYTWdUV2xqYUdGbGJDQkNjbWxoYmlCVlltSnZJRWR5WVdZZ2RtOXVJRUxEdG1SbFptVnNaQ0JVUlZOVUxVOU9URmt3V2pBVUJnY3Foa2pPUFFJQkJna3JKQU1EQWdnQkFRY0RRZ0FFSGxOY296bmpkb2kwWXh2MjdCM3lHYUUvMTl2ak9KSTc4d1QyeURjZWMrbVdBbFJjL2ZFL0J5aFBjL0lPTGtnc2FabWJLdU5RaGhlcEU0UFE0cXRZRGFPQjd6Q0I3REFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRVN4VEFGWVZCN2MyVGUrNUxJL0ttNmtYSWtkTUIwR0ExVWREZ1FXQkJSS1YzM3hmcWsySHRkOEx6VTR0SlRZWFZMdG1UQTRCZ2dyQmdFRkJRY0JBUVFzTUNvd0tBWUlLd1lCQlFVSE1BR0dIR2gwZEhBNkx5OWxhR05oTG1kbGJXRjBhV3N1WkdVdmIyTnpjQzh3RGdZRFZSMFBBUUgvQkFRREFnZUFNQ0FHQTFVZElBUVpNQmN3Q2dZSUtvSVVBRXdFZ1NNd0NRWUhLb0lVQUV3RVJqQXdCZ1VySkFnREF3UW5NQ1V3SXpBaE1COHdIVEFRREE1V1pYSnphV05vWlhKMFpTOHRjakFKQmdjcWdoUUFUQVF4TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUh1c3dCSUlNVHZXUmYrYjVQdThudDltRVoxK0ZkOG8yQjNlMmF0VjJjNzNBaUJwQU1GdUlZMkpJQ1RpNW4xWWo2cnc5NFpMc2lFZlNKVzdtdTJlVTJMZGF3PT0iXSwia2lkIjoiOTY1NzM2OTUyNjE4MTc1Iiwia3R5IjoiRUMiLCJjcnYiOiJCUC0yNTYiLCJ4IjoiSGxOY296bmpkb2kwWXh2MjdCM3lHYUVfMTl2ak9KSTc4d1QyeURjZWMtayIsInkiOiJsZ0pVWFAzeFB3Y29UM1B5RGk1SUxHbVpteXJqVUlZWHFST0QwT0tyV0EwIn0sImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZXhwIjoxNzIyMzgzNzE4LCJpYXQiOjE3MjIzNDA1MTgsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIn0.chehfj5fI0IHw2ORspn7Kmkky-St2vpq40qW-jX16uFqxFTX-YVmWHvoHd6QLulwS-N9dTa759SRPcBYxadUTw"
Ein verschachtelt enthaltenes JWT
+}

body.ssotoken.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
-  "auth_time" : 1719390444,
Timestamp der Authentisierung
+ "auth_time" : 1722340518,
Timestamp der Authentisierung
"amr" : [ "mfa", "sc", "pin" ], "idNummer" : "X110411675", "iss" : "https://idp.dev.gematik.solutions", @@ -968,164 +968,164 @@ "y" : "lgJUXP3xPwcoT3PyDi5ILGmZmyrjUIYXqROD0OKrWA0"
Y-Koordinate des öffentlichen Punkts des Schlüssels
}, "given_name" : "Darius Michael Brian Ubbo", - "exp" : 1719433644,
Gültigkeit des Tokens
- "iat" : 1719390444,
Zeitpunkt der Ausstellung des Tokens
+ "exp" : 1722383718,
Gültigkeit des Tokens
+ "iat" : 1722340518,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld" -}

body.ssotoken.body.njwt.content.body.cnf.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
unsigned_challenge

JWT

Headers
{
+}

body.ssotoken.body.njwt.content.body.cnf.x5c.0.content

X509 Certificate

Subject: C=DE,O=Test GKV-SVNOT-VALID,OU=X110411675,OU=109500969,SURNAME=Bödefeld,GIVENNAME=Darius Michael Brian Ubbo,CN=Darius Michael Brian Ubbo Graf von Bödefeld TEST-ONLY

Issuer: C=DE,O=gematik GmbH NOT-VALID,OU=Elektronische Gesundheitskarte-CA der Telematikinfrastruktur,CN=GEM.EGK-CA10 TEST-ONLY

Serialnumber: 965736952618175

Valid From: 2022-11-24T00:00Z[UTC]

Valid Until: 2025-05-19T23:59:59Z[UTC]


Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Der SSO-Token. Mit diesem kann der Client sich wiederholt einloggen ohne erneut den Besitz der Karte durch unterschreiben einer Challenge beweisen zu müssen. Er ist vom IDP für den IDP verschlüsselt und dementsprechend vom Client nicht weiter zu verarbeiten.
unsigned_challenge

JWT

Headers
{
   "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

{
-  "iss" : "http://localhost:45067",
+}

Body

{
+  "iss" : "http://localhost:36171",
   "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" : "19ZYDZqJfl14MqDU54wGgmppezwnxuLADGBRswkq8RM",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "yra1Py92LQV25eslFv1AQPk9hhGN6kXquRu3h-JYhug",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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.
"token_type" : "challenge", - "nonce" : "dvVItjnRRalmgSR78YmZR5Et6JUP6DAL",
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.
+ "nonce" : "maBlkyLTP7yadyT09Ilopo2IfqFPynMe",
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.
- "state" : "gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "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.
+ "state" : "MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
"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.
- "exp" : 1719390635,
Gültigkeit des Tokens
- "iat" : 1719390455,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "tisnEabT6Mu9i0jdSxfjBJVjB5a-pEIwE543lNk-llY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "ccee9bd29ccc47ee"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Signature

Was verified using Key puk_idp_sig

28302localhost:45067127.0.0.1:-1

28302localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Content-Length
0
Date
Wed, 26 Jun 2024 08:27:37 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&state=gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
+Date: Tue, 30 Jul 2024 11:55:32 GMT
+Location: http://redirect.gematik.de/erezept?code=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0NDEzMn0..dcevW66shPgMFenO.0h5dCEwin_6_mIT-Izo7AMLf-H4xQT45tmiDbV8ntoCVMkdCdcGGZ_vH-BXLODwdsbeALNU5a5aXR6p_lKoWx1LVd12hrPx-s10b1H-KRYOIkLKnmUgagwXK6Z_P2bx4yyCErcmlaKpl6n5YfVO7dolWW8q14ZDmXMuuCetl0NO-bavO1WBArjSFro0VQ06soUr8dyd_5cu8BCf07m6jV0WVT8e0x3UlFp5e2iGTO56nxvGoqnLfPUrFxL5mEC06MNiA45xz-RwtzgjMeJlNCxnwps6h9i2OGFuSALZU05J4FQciQPgfsMYI_wJjvHLt-xUA3E33yi2LSt22liB-hiuP0TY3_m7G8b3xCNyhAgqddBYTVp_dHJAZmJyEpbpMRNM5839HbutVqYZYh7MWfHBYDavgoaAYoMQ9_iVk3e8mCf0l9Pfwx1xYFxSA2peOnY6tWnK2hr2uwOEmQYYAD3CETe7MtPa3EW6vo6MBDD0B1kibepspsKW4uLXHXZc9gkxTo-LvxKqPlLQ9_FE1P8klQTvQIK7DYFMQxT-4pNbtHYdfbsTEBqwXz-JgsL5wCkuiuKtIGSIwkOyRI_L_Zl6BaXzhmpG81iVLSFLMsBZu_Hwu-TX9gkn-WtfDFvfLVDKCFy3awg4EZ1UauZjVyyfxKh6okJ0b9wDJBZxHqeAxbV0_AdX0LSnRBn8OqVo-K5JMdIG1KxE3xhTZgQoRr_CPFB-Ch1N70wuy17GMeJB1sp2KsDkQ0BJwfxF9365BzA0FhKvGfFMwxH4-Zu7BdCPbHKa__4dOttmq_Mc-fzFYTvy0nGjbaFjjPYl4G_fIFqI99kpmntksLAAbyiY2uj878NLERv-w80u3O_V3r2JrVOoA-EzjRUuMuIWM1bykkTeTp5gCLGFAvid61EBbJxhynHblza8oBKnBiv_kWA7lusc6c5e_PGUsXvjBn7FCO7LBWOMxSV-z0MzrFOGKRtOEeeSzLvqXIiU4hAPYXbpyQHP0V2EwlvPPWVkKBJ59uoCtk8y98Sm6xcKQMdAYvBjVS-pMDh35cgkiUAe_pV74G8T_MomNtU2KnPSQpi80EuC3SAaIG8EdmVlxzRxtq-kns4VXfK9JRXA_0euuz0s5pFUGxzq6Dg6wueHmfVoj1dffsc-JHUBzNrJfa4MJmj9rSnCX_wFKHhQuo89gAM-lsK6rnssmYI2EvJwtubQLGj896dLB7Y9NNDXtS8-lQhmGRIRT_kgeKd96LGKptQXauaolRquhcZniatfm-Aej4pdY6NdfQApz3EH0yeHkGMU9f_PiqH5ptANck6MqJKjzONn47n2Q0fdMVIUlthuMZfIjFyzA_x9x1q7iCVFBI8_wFC-V8zXT.2wMJnDuRCG3xyIbkzAbFSQ&state=MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Content-Length
0
Date
Tue, 30 Jul 2024 11:55:32 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Location
http://redirect.gematik.de/erezept?
Optional[code]=<Authorization Code in Base64-URL-Safe Encoding. Wird unten detaillierter aufgeführt>
Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde
&state=MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.

header.Location.code.value

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719394057
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ1MDY3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJSVjh2SjBaa245eDBLQjJUWWJSeU1hTFg1WkNSbU50eSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJkdlZJdGpuUlJhbG1nU1I3OFltWlI1RXQ2SlVQNkRBTCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTcxOTM5MDQ1NywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZ2J6eUZ6VUpmYlE1LVFUSHdZanljaDhPc0hyU0k3azkiLCJleHAiOjE3MTkzOTQwNTcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzE5MzkwNDU3LCJjb2RlX2NoYWxsZW5nZSI6InRpc25FYWJUNk11OWkwamRTeGZqQkpWakI1YS1wRUl3RTU0M2xOay1sbFkiLCJqdGkiOiI0OTNlMjgwMzBkODhmNjU3In0.eZn7gi1E1hjNcRa1ewAVnWH2kc1_1A2VAyuJm5kSMz5ZvYb9laMbk309BJAafZpCKMxFYzREAIjm7kGmJbUpow"
Ein verschachtelt enthaltenes JWT
-}

header.Location.code.value.body.njwt.content

JWT

Headers
{
+  "exp" : 1722344132
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM2MTcxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJPNUROOVJITHk1OGN3OUExMVFhcmZlUDVXOHZsQTNMViIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJtYUJsa3lMVFA3eWFkeVQwOUlsb3BvMklmcUZQeW5NZSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTcyMjM0MDUzMiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiTXRaT0NpaUM0TzdMOGpJN3dqWUVoUzNjc2h6LWhFM2kiLCJleHAiOjE3MjIzNDQxMzIsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzIyMzQwNTMyLCJjb2RlX2NoYWxsZW5nZSI6ImVJYWN0WV9lRVEwaFJRa0QzZFBRb0xEV1NJUzh0dk1MMFExNXV0cElaMEUiLCJqdGkiOiI4YjdhZGFiYzA1Njg5NzdiIn0.CvgW0p_w1WWMgBRAMHMD40bK441iJ_A5SqpnxAnuwXgRIx_fuPKeEMj0buHvdi25aqJpBpX6Olml3iILGvRvsw"
Ein verschachtelt enthaltenes JWT
+}

header.Location.code.value.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
-  "iss" : "http://localhost:45067",
+  "iss" : "http://localhost:36171",
   "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" : "RV8vJ0Zkn9x0KB2TYbRyMaLX5ZCRmNty",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "O5DN9RHLy58cw9A11QarfeP5W8vlA3LV",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "dvVItjnRRalmgSR78YmZR5Et6JUP6DAL",
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.
+ "nonce" : "maBlkyLTP7yadyT09Ilopo2IfqFPynMe",
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" : 1719390457,
Timestamp der Authentisierung
+ "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" : 1722340532,
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" : "gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719394057,
Gültigkeit des Tokens
+ "state" : "MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722344132,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390457,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "tisnEabT6Mu9i0jdSxfjBJVjB5a-pEIwE543lNk-llY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "493e28030d88f657"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key IDP symmetricEncryptionKey

Empty body

29 POST http://localhost:43371/token127.0.0.1:-1localhost:45067

29 POST http://localhost:35601/token127.0.0.1:-1localhost:36171

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2067

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

Der Authorization-Code, so wie er vom Server in der vorigen Antwort auf POST /sign_response zurück gegeben wurde

Headers
{
+content-length: 2067

REQ Headers

accept
application/json
accept-encoding
gzip
content-type
application/x-www-form-urlencoded
user-agent
IdP-Client
content-length
2067

REQ Body

namevalue
client_id
eRezeptApp
Die client_id des Clients. Wird bei der Registrierung vergeben.
Die client_id des Clients. Wird bei der Registrierung vergeben.
code

JWE

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" : 1719394057
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQ1MDY3IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJSVjh2SjBaa245eDBLQjJUWWJSeU1hTFg1WkNSbU50eSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJkdlZJdGpuUlJhbG1nU1I3OFltWlI1RXQ2SlVQNkRBTCIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTcxOTM5MDQ1NywicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiZ2J6eUZ6VUpmYlE1LVFUSHdZanljaDhPc0hyU0k3azkiLCJleHAiOjE3MTkzOTQwNTcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzE5MzkwNDU3LCJjb2RlX2NoYWxsZW5nZSI6InRpc25FYWJUNk11OWkwamRTeGZqQkpWakI1YS1wRUl3RTU0M2xOay1sbFkiLCJqdGkiOiI0OTNlMjgwMzBkODhmNjU3In0.eZn7gi1E1hjNcRa1ewAVnWH2kc1_1A2VAyuJm5kSMz5ZvYb9laMbk309BJAafZpCKMxFYzREAIjm7kGmJbUpow"
Ein verschachtelt enthaltenes JWT
-}

body.code.body.njwt.content

JWT

Headers
{
+  "exp" : 1722344132
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjM2MTcxIiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJzbmMiOiJPNUROOVJITHk1OGN3OUExMVFhcmZlUDVXOHZsQTNMViIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI6IlMyNTYiLCJnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInRva2VuX3R5cGUiOiJjb2RlIiwibm9uY2UiOiJtYUJsa3lMVFA3eWFkeVQwOUlsb3BvMklmcUZQeW5NZSIsImNsaWVudF9pZCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTcyMjM0MDUzMiwicmVkaXJlY3RfdXJpIjoiaHR0cDovL3JlZGlyZWN0LmdlbWF0aWsuZGUvZXJlemVwdCIsInN0YXRlIjoiTXRaT0NpaUM0TzdMOGpJN3dqWUVoUzNjc2h6LWhFM2kiLCJleHAiOjE3MjIzNDQxMzIsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwiaWF0IjoxNzIyMzQwNTMyLCJjb2RlX2NoYWxsZW5nZSI6ImVJYWN0WV9lRVEwaFJRa0QzZFBRb0xEV1NJUzh0dk1MMFExNXV0cElaMEUiLCJqdGkiOiI4YjdhZGFiYzA1Njg5NzdiIn0.CvgW0p_w1WWMgBRAMHMD40bK441iJ_A5SqpnxAnuwXgRIx_fuPKeEMj0buHvdi25aqJpBpX6Olml3iILGvRvsw"
Ein verschachtelt enthaltenes JWT
+}

body.code.body.njwt.content

JWT

Headers
{
   "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

{
+}

Body

{
   "organizationName" : "Test GKV-SVNOT-VALID",
   "professionOID" : "1.2.276.0.76.4.49",
   "idNummer" : "X110411675",
-  "iss" : "http://localhost:45067",
+  "iss" : "http://localhost:36171",
   "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" : "RV8vJ0Zkn9x0KB2TYbRyMaLX5ZCRmNty",
server-nonce. Wird verwendet um noise hinzuzufügen.
+ "snc" : "O5DN9RHLy58cw9A11QarfeP5W8vlA3LV",
server-nonce. Wird verwendet um noise hinzuzufügen.
"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" : "dvVItjnRRalmgSR78YmZR5Et6JUP6DAL",
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.
+ "nonce" : "maBlkyLTP7yadyT09Ilopo2IfqFPynMe",
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" : 1719390457,
Timestamp der Authentisierung
+ "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" : 1722340532,
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" : "gbzyFzUJfbQ5-QTHwYjych8OsHrSI7k9",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
- "exp" : 1719394057,
Gültigkeit des Tokens
+ "state" : "MtZOCiiC4O7L8jI7wjYEhS3cshz-hE3i",
Der state der Session. Sollte dem zufällig generierten state-Wert aus der initialen Anfrage entsprechen.
+ "exp" : 1722344132,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390457,
Zeitpunkt der Ausstellung des Tokens
- "code_challenge" : "tisnEabT6Mu9i0jdSxfjBJVjB5a-pEIwE543lNk-llY",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
- "jti" : "493e28030d88f657"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
Dieser Token wird für den Server mit dem puk_idp_enc verschlüsselt.
{
+  "iat" : 1722340532,
Zeitpunkt der Ausstellung des Tokens
+ "code_challenge" : "eIactY_eEQ0hRQkD3dPQoLDWSIS8tvML0Q15utpIZ0E",
Der Hashwert des Code-Verifiers wird zum IDP als Code-Challenge gesendet. Teil von PKCE.
+ "jti" : "8b7adabc0568977b"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was 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
grant_type
authorization_code
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
Muss exakt diesen Wert enthalten, da es sich um eine Implementierung des OIDC Authorization Code Flows handelt.
key_verifier

JWE

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
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" : "Y06SHz_6zxLc-oMScTGxODs-WUjBzDkPvvdkSt9RP8k",
X-Koordinate des öffentlichen Punkts des Schlüssels
- "y" : "i4N4XYJxs0e1iTeEEgqySwkGyoAEC9NSCaCM7VymxlQ",
Y-Koordinate des öffentlichen Punkts des Schlüssels
+ "x" : "JWqfEiGkkMnjGlmmMZPbD8VLmqTq0N8QaxgUH4MpqsQ",
X-Koordinate des öffentlichen Punkts des Schlüssels
+ "y" : "liiwHF6DAvr9MLFrFwN1W-HD1SG_7rVbzL_XPSZqGP0",
Y-Koordinate des öffentlichen Punkts des Schlüssels
"crv" : "BP-256" } -}

Body
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).

{
+}

Body
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" : "GD1GwJoZrH2WPE9cCIpwDYapytYBxqy5Ab3wd2hDz7E", - "code_verifier" : "uM5YiKsy6SbPaLIoOUzc6hmRMBcbYDTVABjMTEhOozs" -}

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

Encryption info

Was 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.
redirect_uri
http%3A%2F%2Fredirect.gematik.de%2Ferezept
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.
Die für den Client beim Server hinterlegte redirect_uri. Muss dem bei der Registrierung hinterlegten Wert entsprechen.

30200localhost:45067127.0.0.1:-1

30200localhost:36171127.0.0.1:-1

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
28.0.2
Pragma
no-cache
Date
Wed, 26 Jun 2024 08:27:42 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
+Date: Tue, 30 Jul 2024 11:55:37 GMT
+Content-Type: application/json

RES Headers

Keep-Alive
timeout=60
Cache-Control
no-store
Version
29.0.1
Pragma
no-cache
Date
Tue, 30 Jul 2024 11:55:37 GMT
Zeitpunkt der Antwort.
Zeitpunkt der Antwort.
Content-Type
application/json

RES Body

{
   "expires_in" : 300,
   "token_type" : "Bearer",
-  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc2Mn0..OR7eNX0hJyjAqQKD.L6xcZ0y9tvpV5nmCxOCyctprMgYiVwT5HGXzJbjGx8Qhb2h0HdvGZQhMg1vpg5TI1xTZIvGk1Y50W0qS27eWpcb3ElRq_lZln8L0LyQmQ4U53WdcXrxzYXbRgsFcJc9kU6gjBGr4y5io3mJu8CRLWGPCRMI9TmMS7_jLGLsfsC-v4Ln8TCLBEdajg-tqYRPam9Al0ach-QFYBIiyN9Zf2Cskb_08WGyZmvG1qXKxEZ4ZqQSOB2V9I5HZDj7I5P4TLWY5oFn_ByVAAqA5JdRLQTadExmAGWTlK3d_3Ceogns7_8-eevpcMofyhGmW6fv6sjdrJzimADRTI6FXIt-veODGxrqjIyGMfjt9QYePbH1GZHXOTvcGdo0hTyV5nYFWIDDmdsvQaBssmbCKKnL5nsmMiZorWfTuRXtmRSTtGxtneEdmml-1AmdH3c44aE-eYh2S_MB4XoEULnyh3As9Y56wuht5kMQoURoCub04-fuMoy-_ttXr--56kLGbX01HoFvwPq4vXw28CTqlodq-z8sjUqsP0uy8VrCTvBiUeG2TM8P74iHWLyj3x2iOa4O1hvqo_kX5DVoLlmpD2D612XlDBujKwTpwoMGCt1SDmprDD_tYX2_zO6dV7nWnKODEmt_-v_uOSp04jTQVesAIub53AnboyIJqZdB14DArimUEFtYxRdXYDYm2iRepy0Yy2ZEBQQ_a_H5yOynXTcbE6vN52e9gfreQQqs5foXN9UnhycunciWpsQ18hpVztOA8jUN2c8SF6hNmCkHFeeSedv8hL71N21-aoyUufrBtH_OAkGxYi9bIZ50uBaloK7gY8_85ZDktRaP1CSFlMU31GOVmBed9Yg2_BrHTW_0AiAAqG7VtVEePQNP9fYXnZ7fUfTiSrBX2NT49P-r1mInJnjmK8ffcvEj1o0eSOmE99lDWq7E-N9ukdxAj0hiM7wdKl7_PD8PsjTe_U6U7YKptd9220BdZjzmyHYHsLfHuBhlJlCnxdIn2IJxbXoBz6rg_sYcIQbTpU-td9LGTvWRAtyHPXwYNDim6-31xoTNXPD4o702oTLwbB3u5AOtyALGON7t7MUoPwfNEqqsZ8dyObI19-tbEJ2_qpIY2awSfankJHcS3WWQZ0x4ZumnzT3uQbAvEBAorizp2FtHQKYg5rgiWQ4Gaq91KydvE2rvIPkrdFLnUDdVAD8e8blFlFPSKUpZdwItO1gcXFbHs7PCFUjw.aQYSszR9Dov2qc4nedxOAw",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
- "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcxOTM5MDc2Mn0..G0YeADWObxUAhJVg.bKKuQx-nJd84yYe_2-Ey_FeMfN70i54GqU-b3vOkYRRwHr42bGJorPkQuvyVoqp1yAcLt6si_qa-l_HVyP8bf3QxH9Lx7QeY5pDlqALVV31DjzQx5glUNJRsA3yhYT-V5TSaCet63kGBwfpPgSSxkZCmofS5KmflE7SmHat72CivkdFXYAJVuacRkntB5JAqx15qlyTOYSucGy2kxNftKM6MXSrt-aope0bT4t6MJzt9QccQNpt7Ir4cZLDyeNkhHTRdougcaMMVSLeQGQZmInLUnSROJ1ypw292rB2Nz23-pC8lYG2jZpjXPJmoG6SjQLzf_r-ghqwGXfKB8PBoZwwHlU2LIHaFaNJ3Ehvl6sz7pkQCktpW7ROKFoD00oNnagZsXciKTq07eLPuayinIs6JwxJJzc6sqmGJMy9FmCmhvVLdpz20_tYKcV7187uqUTmOhAH0STnaq3Bx6PGUvyqSgH5CRlQy29AKn2gojanHFkOXmb8QzyjcC3Clyx24M3ZvR13pUzeV1Q9x--m9iJ38ttqkHgTQ_b5fa_-VFoNpiwySn51IE_kZ2O9QBetydW7NN6L1Eo_24ATxOHsMru1zChOEAi-JcKD0lMoph7EIFxldbeXzxmxExbRe3WW9NTZ15GUjt0OFlwOISeJCfbkLaYlMnOARtKP1nNpjdXiGMuDxdSQ4Hqr3xbU0kKZxkoVMcmphyt4FaHP4V2QzkmKCal-R_Ay_Iuj81Jym_5lAdTEsYVldH-lY2hurusfl6CbW_OJ4k8OORHkQuwyQdArzlK3Uis-YqeVNYb2Ig0uKJG4H-zaplgSUMqtqpmOLpBUoBA4RbRPjMF_oR65TvUuC7VRLZKkluMP3a9nqcI6_tpnO7raG2O4o11Vox6VRienfQdjKZiOfDDCusGNmGNYNC0RjLyVDdvVF_PysK8R-jgWyJBqdnW1ExXD17Fa82MbdD3acfbzoL18kWDNWKDVyw29j3c0Ze3ynGeJL_elXE2lpbY6srYRlKdhesn3cS83xRFnY7V3eS2d6Ppb6GZ4dCKVuSWBr4nYs_VmIpaNTXJDbI27f6zd4S8_KWl7J2gVAHlLoB_ZXiQ1Wf75V8z0W9bgvHHdDGYM8Yx0fwtHeyNsg3CO9RhSKRt_pN6H-lf8V_tP1_VZyWdNAy_5l4YS0DJ9RXduX0WVkbjjEtxIySDvpvF5BlfQHd8JyKngCeQdggfN3RpwVQxzwgcbgt0c2t_2t_f08XId92ZXTx-mh6Bn4Rjf4ilQ.t-3ZHV5-iQdXtd2Jlyxhpg"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
-}

body.id_token.content

JWE

Headers
{
+  "id_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgzN30..urTg2a75_ExFVBZH.OV2HxgvTe1Hau2pGJ8qyNzxnCy-yJmHklOqkqumyGxn7bd6n3DLerO3qH11oEoxuVLfgO_1YJCjm-zx5_XkF1ZtFabi1N9J0KhDpUr9GM2pVWCEyg91fwg3uOw2xq6-MMOAyCbxa7ZXAQcSe4Xj8IDE_usUw9Y14crYY1f3Rt7cbSAB2awSVQ6oSLr9gHiau_MnyGb7vFpYu9iMIOQPF_627lwUi7YYLVL9dBZCUn_CUBujKx8PHJqk726tzO_Pc8AnS5tcAqDGiWON175-q5_M_w6yFm5c1P18Pp73x4LLJ2uRukp6CE-02qgNKYP_2WABP07qOMKwXoGQOfPMC1jOrw6xodhJVWpoJmMF9RF-_DExX2Bn0Hvas4aP1ByXhScKmtJcvbqs-DlUrLKQjAVE_ny7L6WqMFlTzua0DqmuNtLd9YovW1I7Upi6oNdBbMqi53QFuCc95bMtlf5G90FYA-9ctFUOp_7ENhVzShRiRpQTNOeowwNTMPdKWGzOR4jOE5xA6R-mstS-uA9mc1oRQAn3hzt2KKRWYGCQpfRbL0yg7xLrwQLmKUsphjvfH2r8pqELT302gF7-bLJp7x8I20yKEr7-hCq6xuZRmc7c_4mpERMUSM2t-32o0b-ShaT4Sh5r05frB61UyitQcE6GZ9orsw2lReEG0So5YIRids_-lbhdztNBsRwnS_c-_9bbKL7yvKqMHHRk3DStw9FU6hVswuobv0inc1DDJ0GFXnnNfFhUsevJS7OTnWBlItgpVPBPnvsEhkVGb2Bn7bt9u8SwZANG34NtNnK0KfKES3E3alDWSTIogOrpAZSh7f3gtxsP5PMP2uyrlcanA1NRXtf1jytQgqgSi1ZGWauhfu6iudDbd8r8B0H5Mb6A4CAND0dUUzI_XiabA19WPeFi0U5O_omOyVDLjSDtn7bHLiZ2DiQKZ4Qe544upRSARet8JJrwkHS06BnMR5SYogIO2BL7PxdIlI3iHEMOee1kKRS96IXH1VWf_D1PrCfIY9r275q9aCvjBf8cvKcNMrv94HWEgmi982f7JnEM9ahQezyPG7IH-mfRbPpM-lQEv5SWNiOkU6ubSC2B6wH_ldVKhZ2ilJizdskh2WLr6EZOtGgMRS5Ti3te5JYx20Jtfvvz0H3M0g7AGP4t9m2eV7tYBB92AsRs6eVE83F6Gbl8ZxddATDqfAgip9Fw_kq8GwjgaKp0UE5wAJRUOVHbdrPw.IecPAWjlmRDb7YCH3Zjikw",
Das verschlüsselte ID-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+ "access_token" : "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMjM0MDgzN30..kmc3PW0Y_ipU0att.0ItrXiCDiYcRk1cLCE-MiHsSvtqQ6iEZ9CZA2cOt_Ckby32hQjZ_Pjps-joMvAjiCh7DRQSGDzk0xcywX7_kV01w0F4FW-M1e6lEqWiotuaXIwSzdfi2eOXxvXI71Kk9ibcRjP4AxLRpNKcdTkNTA30BIqwrULrLNS_xcEddC_Pkyj0KU4gLCQ-CJMZqwO2nKSZanKuB25K6ehAG1Psinj1MtoaQF_th0rZ5VSquEbrMj1c9GjGvtq3-HYVvWb4vNoHLWlPQJvVh95EoiPXbgOOJV4Xmdr37GxOkxwS_2u8obxUl2KQ_MpWhR-gHLHgjbfKSDruLpRhcdIV-pwDJGZw2Xi0Yk0AcqYFAgVUXYwX6q1kjoyhHdwdLGovEhEgeLuHbTMrXGk1QAjfEX2jxyDdaA6PC7NADmmPTah6zBctUKCBu2weuwwxdVhr5YSesi4nSuxcD-a7RbtROUkD8ZZZmYJbkOGikwekTKpHPEBSbKlRPqht6y48jC4J5jLIxCGg6JAev4yLRo9UORFVvCcpWu_ZGVwUW8rf2h0ejD_O1yH0jc_r02phimoKyfVEnHaWflZhHyQmEI0MPzLQZXZaNBlzVGSNm0lv7qajVl1qYUgwWZ8enTC5KmiCa-sknmWCtlH7eO61-UBmcfaU8Xsp6jCp3LtILuze5uIWMFVZu7NaxqBDxdgz7_Jxd-tYvce0NV9ceH6r2gURNMWEK17kVaPnqLj3nXkhfyf7rPiS4AB6x1j0y8PMC27XuUZ8VYnmyrGJjfxpoINF7LnGYEURna0_kSPX5RRQHppkuxrA6PlfzgvtlOI3hixkrK_yDegoGMql7qIOHdA8iS6CNKkpk8EzKxg_VUPHRdEaiK3eE5XHXzk-0oguVOztSzDD5QP3w83rDKjBJI2aEu-F7_tk0CK1GUp_Md99iFEH2Y5GjdcBKbtD7eseIS_nG4hI0402gcV9MCFJ_ufeJBtD4SngyQZu68X5KH2WIARuttM8IZPJqm_T66fZI8I3HiCT15UNVTCKCX8UiBCwAeqTsg-8cmEcjNb3buaVQHVM3EM0-FgjjK-t0hanib5kRe6CpkekoMXP7Fu8H_9MyzBQwcU1aUEhrlc637JWfxtRbQdBA7Mbhvyz7X5avAD8fgFfxVeO5kUHYMpm1Dtn8WsfU2bG2NAHnJm28CWNrBvUPQHB_9RqMfDZS7MvjfLFvDpuS-dx7QXHxjfFBlarzeb1Hh5NNaQm94EHy_qxXH8GL0AsqonWmjmYBqnM.3yKtjIlz4hyWUKMGr6_iqg"
Das verschlüsselte Access-Token. Der Server chiffriert das Token selbst zur Sicherung des Transport-Weges. Zur Verschlüsselung verwendet wird hier der token_key aus der Anfrage des Clients.
+}

body.id_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390762
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiVWJydnFRRERpSFZNMUcxaU9ldXBQZyIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoiZHZWSXRqblJSYWxtZ1NSNzhZbVpSNUV0NkpVUDZEQUwiLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcxOTM5MDQ1NywiZXhwIjoxNzE5MzkwNzYyLCJpYXQiOjE3MTkzOTA0NjIsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiZjEyMjE1MDI4NzBmYzU5OCJ9.GAxkr4LXfVU84wvgnvXYbf0n4SbSFletXIx9DnE2KrQNQ6NNLkrJLW1IHXVufgGYNXtQ_6t-hVkhMk-SoS_Mdg"
Ein verschachtelt enthaltenes JWT
-}

body.id_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340837
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJhdF9oYXNoIjoiM3VhdmxaRW83aEZ4UENSajE3MllJdyIsInN1YiI6InAyaC1SVDZFRVJnaGJqUDhSMXdueXo4azR4aE9od2Jlc0pSUDBYbnVTbW8iLCJvcmdhbml6YXRpb25OYW1lIjoiVGVzdCBHS1YtU1ZOT1QtVkFMSUQiLCJwcm9mZXNzaW9uT0lEIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJpZE51bW1lciI6IlgxMTA0MTE2NzUiLCJhbXIiOlsibWZhIiwic2MiLCJwaW4iXSwiaXNzIjoiaHR0cHM6Ly9pZHAuZGV2LmdlbWF0aWsuc29sdXRpb25zIiwiZ2l2ZW5fbmFtZSI6IkRhcml1cyBNaWNoYWVsIEJyaWFuIFViYm8iLCJkaXNwbGF5X25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIELDtmRlZmVsZCIsIm5vbmNlIjoibWFCbGt5TFRQN3lhZHlUMDlJbG9wbzJJZnFGUHluTWUiLCJhdWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXpwIjoiZVJlemVwdEFwcCIsImF1dGhfdGltZSI6MTcyMjM0MDUzMiwiZXhwIjoxNzIyMzQwODM3LCJpYXQiOjE3MjIzNDA1MzcsImZhbWlseV9uYW1lIjoiQsO2ZGVmZWxkIiwianRpIjoiNjExZjc2MDYwZWMyMWZkNyJ9.Pkrp9Sp_Btaq1NNQIEq3M_RcjsdUSgQ8A6kCDRm76MJq1VXWD14Y0TJ_ELxOAul3lOrWdOgMGHH5bXlW1rOlbg"
Ein verschachtelt enthaltenes JWT
+}

body.id_token.content.body.njwt.content

JWT

Headers
{
   "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

{
-  "at_hash" : "UbrvqQDDiHVM1G1iOeupPg",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
+}

Body

{
+  "at_hash" : "3uavlZEo7hFxPCRj172YIw",
Erste 16 Bytes des Hash des Authentication Tokens Base64(subarray(Sha256(authentication_token), 0, 16))
"sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"organizationName" : "Test GKV-SVNOT-VALID", "professionOID" : "1.2.276.0.76.4.49", @@ -1134,27 +1134,27 @@ "iss" : "https://idp.dev.gematik.solutions", "given_name" : "Darius Michael Brian Ubbo", "display_name" : "Darius Michael Brian Ubbo Bödefeld", - "nonce" : "dvVItjnRRalmgSR78YmZR5Et6JUP6DAL",
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.
+ "nonce" : "maBlkyLTP7yadyT09Ilopo2IfqFPynMe",
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.
"aud" : "eRezeptApp", "acr" : "gematik-ehealth-loa-high", "azp" : "eRezeptApp", - "auth_time" : 1719390457,
Timestamp der Authentisierung
- "exp" : 1719390762,
Gültigkeit des Tokens
- "iat" : 1719390462,
Zeitpunkt der Ausstellung des Tokens
+ "auth_time" : 1722340532,
Timestamp der Authentisierung
+ "exp" : 1722340837,
Gültigkeit des Tokens
+ "iat" : 1722340537,
Zeitpunkt der Ausstellung des Tokens
"family_name" : "Bödefeld", - "jti" : "f1221502870fc598"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
+  "jti" : "611f76060ec21fd7"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
+}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

body.access_token.content

JWE

Headers
{
   "alg" : "dir",
   "enc" : "A256GCM",
   "cty" : "NJWT",
-  "exp" : 1719390762
Gültigkeit des Tokens
-}

Body

{
-  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6Im9wZW5pZCBlLXJlemVwdCIsImF1dGhfdGltZSI6MTcxOTM5MDQ1NywiZXhwIjoxNzE5MzkwNzYyLCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcxOTM5MDQ2MiwianRpIjoiOWQ4ODk1OGY2Nzc4M2VjZSJ9.dTllHRaXXm7qw822t-Y5puSAKoUMYCcnFw70F3xrLZ4spko5G6mmj1s5OyWGp-o2ybKU_h9UtoZIvLNdNMQS5g"
Ein verschachtelt enthaltenes JWT
-}

body.access_token.content.body.njwt.content

JWT

Headers
{
+  "exp" : 1722340837
Gültigkeit des Tokens
+}

Body

{
+  "njwt" : "eyJhbGciOiJCUDI1NlIxIiwidHlwIjoiYXQrSldUIiwia2lkIjoicHVrX2lkcF9zaWcifQ.eyJzdWIiOiJwMmgtUlQ2RUVSZ2hialA4UjF3bnl6OGs0eGhPaHdiZXNKUlAwWG51U21vIiwicHJvZmVzc2lvbk9JRCI6IjEuMi4yNzYuMC43Ni40LjQ5Iiwib3JnYW5pemF0aW9uTmFtZSI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwiaWROdW1tZXIiOiJYMTEwNDExNjc1IiwiYW1yIjpbIm1mYSIsInNjIiwicGluIl0sImlzcyI6Imh0dHBzOi8vaWRwLmRldi5nZW1hdGlrLnNvbHV0aW9ucyIsImdpdmVuX25hbWUiOiJEYXJpdXMgTWljaGFlbCBCcmlhbiBVYmJvIiwiZGlzcGxheV9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyBCw7ZkZWZlbGQiLCJjbGllbnRfaWQiOiJlUmV6ZXB0QXBwIiwiYWNyIjoiZ2VtYXRpay1laGVhbHRoLWxvYS1oaWdoIiwiYXVkIjoiaHR0cHM6Ly9lcnAtdGVzdC56ZW50cmFsLmVycC5zcGxpdGRucy50aS1kaWVuc3RlLmRlLyIsImF6cCI6ImVSZXplcHRBcHAiLCJzY29wZSI6ImUtcmV6ZXB0IG9wZW5pZCIsImF1dGhfdGltZSI6MTcyMjM0MDUzMiwiZXhwIjoxNzIyMzQwODM3LCJmYW1pbHlfbmFtZSI6IkLDtmRlZmVsZCIsImlhdCI6MTcyMjM0MDUzNywianRpIjoiZjk3ZDA5OTI5OTdhYWIzYSJ9.MWyEuG1B-dqlHMHIfmL8--JU-Cpd2nrdlD2dWieBTpFpbL6V_wyT_bk6IqF3h3M_plfcUWttuvJuMMkFqu-WZg"
Ein verschachtelt enthaltenes JWT
+}

body.access_token.content.body.njwt.content

JWT

Headers
{
   "alg" : "BP256R1",
   "typ" : "at+JWT",
   "kid" : "puk_idp_sig"
Identifiziert den hier beschriebenen Schlüssel. Beschreibung siehe https://tools.ietf.org/html/rfc7517#section-4.5
-}

Body

{
+}

Body

{
   "sub" : "p2h-RT6EERghbjP8R1wnyz8k4xhOhwbesJRP0XnuSmo",
subject. Base64(sha256(audClaim + idNummerClaim + serverSubjectSalt))
"professionOID" : "1.2.276.0.76.4.49", "organizationName" : "Test GKV-SVNOT-VALID", @@ -1167,13 +1167,13 @@ "acr" : "gematik-ehealth-loa-high", "aud" : "https://erp-test.zentral.erp.splitdns.ti-dienste.de/", "azp" : "eRezeptApp", - "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" : 1719390457,
Timestamp der Authentisierung
- "exp" : 1719390762,
Gültigkeit des Tokens
+ "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" : 1722340532,
Timestamp der Authentisierung
+ "exp" : 1722340837,
Gültigkeit des Tokens
"family_name" : "Bödefeld", - "iat" : 1719390462,
Zeitpunkt der Ausstellung des Tokens
- "jti" : "9d88958f67783ece"
A unique identifier for the token, which can be used to prevent reuse of the token. Value is a case-sensitive string.
-}

Signature

Was verified using Key puk_idp_sig

Encryption info

Was decrypted using Key token_key

Created Wed, 26 Jun 2024 10:27:45 +0200
\ No newline at end of file + \ No newline at end of file diff --git a/idp-client/pom.xml b/idp-client/pom.xml index a734a62..4edfee2 100644 --- a/idp-client/pom.xml +++ b/idp-client/pom.xml @@ -7,13 +7,13 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml de.gematik.idp idp-client - 28.0.2 + 29.0.1 jar diff --git a/idp-commons/pom.xml b/idp-commons/pom.xml index 7c25e4e..7c3daf8 100644 --- a/idp-commons/pom.xml +++ b/idp-commons/pom.xml @@ -6,12 +6,12 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml idp-commons - 28.0.2 + 29.0.1 @@ -77,7 +77,7 @@ commons-codec commons-codec - 1.17.0 + 1.17.1 com.konghq diff --git a/idp-commons/src/main/java/de/gematik/idp/IdpConstants.java b/idp-commons/src/main/java/de/gematik/idp/IdpConstants.java index 6bda119..b3d246f 100644 --- a/idp-commons/src/main/java/de/gematik/idp/IdpConstants.java +++ b/idp-commons/src/main/java/de/gematik/idp/IdpConstants.java @@ -33,6 +33,7 @@ public final class IdpConstants { public static final String THIRD_PARTY_ENDPOINT = "/extauth"; public static final String DEFAULT_SERVER_URL = "https://idp.dev.gematik.solutions"; public static final String EIDAS_LOA_HIGH = "gematik-ehealth-loa-high"; + public static final String EIDAS_LOA_SUBSTANTIAL = "gematik-ehealth-loa-substantial"; public static final int JTI_LENGTH = 16; public static final String AMR_FAST_TRACK = "mfa"; diff --git a/idp-commons/src/main/java/de/gematik/idp/token/AccessTokenBuilder.java b/idp-commons/src/main/java/de/gematik/idp/token/AccessTokenBuilder.java index 589aedc..9c6aeba 100644 --- a/idp-commons/src/main/java/de/gematik/idp/token/AccessTokenBuilder.java +++ b/idp-commons/src/main/java/de/gematik/idp/token/AccessTokenBuilder.java @@ -16,6 +16,7 @@ package de.gematik.idp.token; +import static de.gematik.idp.IdpConstants.EIDAS_LOA_HIGH; import static de.gematik.idp.IdpConstants.EREZEPT; import static de.gematik.idp.IdpConstants.OPENID; import static de.gematik.idp.IdpConstants.PAIRING; @@ -110,7 +111,9 @@ public JsonWebToken buildAccessToken(final JsonWebToken authenticationToken) { claimsMap.put(ISSUED_AT.getJoseName(), now.toEpochSecond()); claimsMap.put(ISSUER.getJoseName(), issuerUrl); - claimsMap.put(AUTHENTICATION_CLASS_REFERENCE.getJoseName(), IdpConstants.EIDAS_LOA_HIGH); + claimsMap.put( + AUTHENTICATION_CLASS_REFERENCE.getJoseName(), + authenticationToken.getBodyClaim(AUTHENTICATION_CLASS_REFERENCE).orElse(EIDAS_LOA_HIGH)); claimsMap.put( AUDIENCE.getJoseName(), determineAudienceBasedOnScope(authenticationToken.getScopesBodyClaim())); diff --git a/idp-commons/src/main/java/de/gematik/idp/token/IdTokenBuilder.java b/idp-commons/src/main/java/de/gematik/idp/token/IdTokenBuilder.java index e40fd6f..b931aac 100644 --- a/idp-commons/src/main/java/de/gematik/idp/token/IdTokenBuilder.java +++ b/idp-commons/src/main/java/de/gematik/idp/token/IdTokenBuilder.java @@ -16,6 +16,7 @@ package de.gematik.idp.token; +import static de.gematik.idp.IdpConstants.EIDAS_LOA_HIGH; import static de.gematik.idp.IdpConstants.EREZEPT; import static de.gematik.idp.field.ClaimName.ACCESS_TOKEN_HASH; import static de.gematik.idp.field.ClaimName.AUDIENCE; @@ -114,7 +115,9 @@ public JsonWebToken buildIdToken( .getBodyClaim(AUTHENTICATION_METHODS_REFERENCE) .or(() -> accessToken.getBodyClaim(AUTHENTICATION_METHODS_REFERENCE)) .orElseThrow()); - claimsMap.put(AUTHENTICATION_CLASS_REFERENCE.getJoseName(), IdpConstants.EIDAS_LOA_HIGH); + claimsMap.put( + AUTHENTICATION_CLASS_REFERENCE.getJoseName(), + authenticationToken.getBodyClaim(AUTHENTICATION_CLASS_REFERENCE).orElse(EIDAS_LOA_HIGH)); claimsMap.put(ACCESS_TOKEN_HASH.getJoseName(), atHashValue); claimsMap.put( SUBJECT.getJoseName(), diff --git a/idp-crypto/pom.xml b/idp-crypto/pom.xml index 033d145..8e4b432 100644 --- a/idp-crypto/pom.xml +++ b/idp-crypto/pom.xml @@ -6,12 +6,12 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml idp-crypto - 28.0.2 + 29.0.1 diff --git a/idp-crypto/src/main/java/de/gematik/idp/crypto/KeyUtility.java b/idp-crypto/src/main/java/de/gematik/idp/crypto/KeyUtility.java index dca3234..549248b 100644 --- a/idp-crypto/src/main/java/de/gematik/idp/crypto/KeyUtility.java +++ b/idp-crypto/src/main/java/de/gematik/idp/crypto/KeyUtility.java @@ -54,7 +54,9 @@ public static PublicKey readX509PublicKey(final File pemFile) { private static BCECPublicKey convertToBCECPublicKey( final SubjectPublicKeyInfo subjectPublicKeyInfo) - throws PEMException, NoSuchAlgorithmException, NoSuchProviderException, + throws PEMException, + NoSuchAlgorithmException, + NoSuchProviderException, InvalidKeySpecException { // Convert SubjectPublicKeyInfo to PublicKey final JcaPEMKeyConverter converter = new JcaPEMKeyConverter(); diff --git a/idp-report/pom.xml b/idp-report/pom.xml index a9e2951..7321d8d 100644 --- a/idp-report/pom.xml +++ b/idp-report/pom.xml @@ -6,7 +6,7 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 idp-report diff --git a/idp-sektoral/pom.xml b/idp-sektoral/pom.xml index 278e030..da9ac29 100644 --- a/idp-sektoral/pom.xml +++ b/idp-sektoral/pom.xml @@ -7,12 +7,12 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml idp-sektoral - 28.0.2 + 29.0.1 jar diff --git a/idp-server/pom.xml b/idp-server/pom.xml index 8a3d85b..3cc56c5 100644 --- a/idp-server/pom.xml +++ b/idp-server/pom.xml @@ -7,19 +7,19 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml idp-server - 28.0.2 + 29.0.1 jar undefined 2.4.0-b180830.0359 4.0.5 - 3.1.1 + 3.1.3 @@ -60,7 +60,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.5.0 + 2.6.0 @@ -136,7 +136,7 @@ org.modelmapper modelmapper - 3.2.0 + 3.2.1 com.mysql @@ -145,7 +145,7 @@ org.wiremock wiremock-standalone - 3.7.0 + 3.9.1 test diff --git a/idp-server/src/main/docker/Dockerfile b/idp-server/src/main/docker/Dockerfile index 79c2a6a..0586fdc 100644 --- a/idp-server/src/main/docker/Dockerfile +++ b/idp-server/src/main/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:17-jre +FROM eclipse-temurin:21-jre ARG COMMIT_HASH ARG VERSION diff --git a/idp-test/pom.xml b/idp-test/pom.xml index 162a47d..6e2cbe4 100644 --- a/idp-test/pom.xml +++ b/idp-test/pom.xml @@ -6,18 +6,18 @@ de.gematik.idp idp-global - 28.0.2 + 29.0.1 ../pom.xml idp-test - 28.0.2 + 29.0.1 org.junit.jupiter junit-jupiter-engine - 5.10.2 + 5.10.3 commons-io diff --git a/idp-testsuite/pom.xml b/idp-testsuite/pom.xml index 2a6cb7d..7a428e0 100644 --- a/idp-testsuite/pom.xml +++ b/idp-testsuite/pom.xml @@ -6,28 +6,28 @@ de.gematik.idp idp-testsuite - 28.0.2 + 29.0.1 jar idp sektoralIdp 3.6.0 - 3.14.0 + 3.15.0 3.13.0 1.0.1 - 17 + 21 20240303 3.4.0 - 3.3.0 + 3.3.1 3.4.2 - 3.7.0 + 3.8.0 3.3.1 3.3.1 - 3.3.0 - 5.4.0 + 3.3.1 + 5.5.0 2.0.13 - 3.1.1 + 3.1.3 @@ -88,7 +88,7 @@ org.projectlombok lombok - 1.18.32 + 1.18.34 provided @@ -99,7 +99,7 @@ org.skyscreamer jsonassert - 1.5.1 + 1.5.3 test @@ -169,7 +169,7 @@ org.junit.vintage junit-vintage-engine - 5.10.2 + 5.10.3 test @@ -182,15 +182,15 @@ ${version.maven-compiler-plugin} UTF-8 - 17 - 17 + ${java.version} + ${java.version} true true maven-failsafe-plugin - 3.3.0 + 3.3.1 **/Driver*.java diff --git a/idp-testsuite/src/test/resources/features/eRezeptAuthServer/getTokenWithSektoralIdp.feature b/idp-testsuite/src/test/resources/features/eRezeptAuthServer/getTokenWithSektoralIdp.feature index f23f54d..a2f6682 100644 --- a/idp-testsuite/src/test/resources/features/eRezeptAuthServer/getTokenWithSektoralIdp.feature +++ b/idp-testsuite/src/test/resources/features/eRezeptAuthServer/getTokenWithSektoralIdp.feature @@ -26,8 +26,8 @@ Feature: Authentisierung mit sektoralem IDP And TGR find request to path "/.well-known/openid-configuration" And TGR set local variable "fedAuthEndpoint" to "!{rbel:currentResponseAsString('$.body.body.federation_authorization_endpoint')}" And TGR set local variable "tokenEndpoint" to "!{rbel:currentResponseAsString('$.body.body.token_endpoint')}" - - + And TGR disable HttpClient followRedirects configuration + @TCID:IDP_REF_FEDAUTH_001 @Approval @TESTSTUFE:4 @@ -173,7 +173,7 @@ Feature: Authentisierung mit sektoralem IDP """ { acr: "gematik-ehealth-loa-high", - amr: ["mfa"], + amr: "urn:telematik:auth:eGK", aud: "${json-unit.ignore}", auth_time: "${json-unit.ignore}", azp: "eRezeptApp", @@ -258,4 +258,92 @@ Feature: Authentisierung mit sektoralem IDP Examples: | code | state | errorCode | | invalidcode | ${fachdienstState} | 400 | - | ${gsiAuthCode} | xxxstatexxx | 400 | \ No newline at end of file + | ${gsiAuthCode} | xxxstatexxx | 400 | + + + @TCID:IDP_REF_FEDAUTH_007 + @Approval + @TESTSTUFE:4 + Scenario: Fed Auth Endpoint - Auth Code des eRezept Authservers beim Token Endpoint einreichen + + ``` + Wir fordern vom fed_auth_endpoint eine request_uri an. Mit dieser gehen wir zum GSI + Der Authentication Request an den GSI wird mit einem auth_code beantwortet. + Diesen senden wir an den Auth Server des eRezepts, substantial soll akzeptiert werden. + Die Antwort muss einen auth_code des eRezept Authservers enthalten + Diesen senden wir an den Token Endpoint des zentralen IDPs + + Given TGR clear recorded messages + And TGR sende eine GET Anfrage an "${fedAuthEndpoint}" mit folgenden Daten: + | client_id | state | redirect_uri | code_challenge | code_challenge_method | response_type | nonce | scope | idp_iss | + | eRezeptApp | xxxstatexxx | https://redirect.gematik.de/erezept | Ca3Ve8jSsBQOBFVqQvLs1E-dGV1BXg2FTvrd-Tg19Vg | S256 | code | 1234 | openid e-rezept | https://gsi.dev.gematik.solutions | + And TGR find request to path ".*" + And TGR set local variable "requestUri" to "!{rbel:currentResponseAsString('$.header.Location.request_uri.value')}" + And TGR set local variable "gsiAuthEndpoint" to "!{rbel:currentResponseAsString('$.header.Location.basicPath')}" + And TGR clear recorded messages + And TGR sende eine GET Anfrage an "${gsiAuthEndpoint}" mit folgenden Daten: + | request_uri | user_id | + | ${requestUri} | O018753329 | + And TGR find request to path ".*" + And TGR set local variable "gsiAuthCode" to "!{rbel:currentResponseAsString('$.header.Location.code.value')}" + And TGR set local variable "fachdienstState" to "!{rbel:currentResponseAsString('$.header.Location.state.value')}" + And TGR clear recorded messages + And TGR sende eine POST Anfrage an "${fedAuthEndpoint}" mit folgenden Daten: + | code | state | + | ${gsiAuthCode} | ${fachdienstState} | + And TGR find request to path ".*" + And TGR set local variable "fachdienstCode" to "!{rbel:currentResponseAsString('$.header.Location.code.value')}" + And TGR clear recorded messages + When TGR sende eine POST Anfrage an "${tokenEndpoint}" mit folgenden Daten: + | code | key_verifier | grant_type | redirect_uri | client_id | + | ${fachdienstCode} | ${fed.keyVerifier} | authorization_code | https://redirect.gematik.de/erezept | eRezeptApp | + And TGR find request to path ".*" + Then TGR current response with attribute "$.responseCode" matches "200" + Then TGR current response at "$.body" matches as JSON: + """ + { + expires_in: 300, + token_type: 'Bearer', + id_token: '.*', + access_token: '.*' + } + """ + Then TGR current response at "$.body.access_token.header" matches as JSON: + """ + { + "alg": "dir", + "enc": "A256GCM", + "cty": "NJWT", + "exp": "${json-unit.ignore}" + } + """ + Then TGR current response at "$.body.access_token.body.njwt.header" matches as JSON: + """ + { alg: "BP256R1", + kid: "${json-unit.ignore}", + typ: "at+JWT" + } + """ + Then TGR current response at "$.body.access_token.body.njwt.body" matches as JSON: + """ + { + acr: "gematik-ehealth-loa-substantial", + amr: "urn:telematik:auth:mEW", + aud: "${json-unit.ignore}", + auth_time: "${json-unit.ignore}", + azp: "eRezeptApp", + client_id: "eRezeptApp", + exp: "${json-unit.ignore}", + jti: "${json-unit.ignore}", + family_name: "", + given_name: "", + iat: "${json-unit.ignore}", + idNummer: "O018753329", + iss: "${fed.idpIss}", + organizationName: "106589300", + professionOID: "1.2.276.0.76.4.49", + scope: "openid e-rezept", + sub: ".*", + display_name: "Hildur Fürsich" + } + """ diff --git a/pom.xml b/pom.xml index 773a938..911013d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,13 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 de.gematik.idp idp-global - 28.0.2 + 29.0.1 pom IDP @@ -74,7 +74,7 @@ ${docker.registry.gematik}/idp/idp-fachdienst - 17 + 21 true UTF-8 UTF-8 @@ -90,17 +90,18 @@ 1.78.1 2.16.1 - 3.14.0 + 3.15.0 2.1.4 - 2.2.224 + 2.3.230 20240303 3.4.2 - 5.4.0 + 5.5.0 3.2.4 - 4.4.0 + 4.4.4 + 4.2.9 3.6.0 - 0.44.0 + 0.45.0 1.0.1 0.8.12 4.0.0 @@ -111,23 +112,23 @@ 3.1.2 3.5.0 - 3.3.0 + 3.3.1 3.2.4 3.4.1 - 3.7.0 - 3.6.0 + 3.8.0 + 3.6.2 3.3.1 3.12.1 3.3.1 - 3.3.0 + 3.3.1 1.7.0 2.0.13 4.0.0.4121 2.43.0 - 1.15.0 - 3.3.1 + 1.17.0 + 3.3.2 false @@ -161,7 +162,7 @@ com.konghq unirest-objectmapper-jackson - ${version.unirest} + ${version.unirest-objectmapper-jackson} @@ -194,11 +195,6 @@ org.apache.logging.log4j log4j-slf4j2-impl ${version.log4j2} - - - com.konghq - unirest-objectmapper-jackson - 4.2.9 @@ -216,8 +212,8 @@ ${version.maven-compiler-plugin} ${project.build.sourceEncoding} - ${version.java} - ${version.java} + ${java.version} + ${java.version} true @@ -241,8 +237,8 @@ ${version.maven} - Java version should be ${version.java}. - ${version.java} + Java version should be ${java.version}. + ${java.version}