diff --git a/ehealthid-rp/src/main/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImpl.java b/ehealthid-rp/src/main/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImpl.java index a3adb8d..e390403 100644 --- a/ehealthid-rp/src/main/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImpl.java +++ b/ehealthid-rp/src/main/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImpl.java @@ -107,7 +107,21 @@ private String issueIdToken(String audience, String nonce, IdTokenJWS federatedI // complete list of scopes and corresponding claims: // https://fachportal.gematik.de/fachportal-import/files/gemSpec_IDP_Sek_V2.0.1.pdf // Specification 4.2.4 - A_22989 - + + claimsBuilder.claim("birthdate", federatedIdToken.body().telematikBirthdate()); + claimsBuilder.claim("urn:telematik:claims:alter", federatedIdToken.body().telematikAlter()); + claimsBuilder.claim( + "urn:telematik:claims:display_name", federatedIdToken.body().telematikDisplayName()); + claimsBuilder.claim( + "urn:telematik:claims:given_name", federatedIdToken.body().telematikGivenName()); + claimsBuilder.claim( + "urn:telematik:claims:geschlecht", federatedIdToken.body().telematikGeschlecht()); + claimsBuilder.claim("urn:telematik:claims:email", federatedIdToken.body().telematikEmail()); + claimsBuilder.claim( + "urn:telematik:claims:profession", federatedIdToken.body().telematikProfession()); claimsBuilder.claim("urn:telematik:claims:id", federatedIdToken.body().telematikKvnr()); + claimsBuilder.claim( + "urn:telematik:claims:organization", federatedIdToken.body().telematikOrganization()); var claims = claimsBuilder.build(); diff --git a/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImplTest.java b/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImplTest.java index a99a606..34a8bc7 100644 --- a/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImplTest.java +++ b/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/svc/TokenIssuerImplTest.java @@ -144,7 +144,8 @@ void redeem_twice() throws JOSEException { new IdTokenJWS( null, new IdToken( - null, "tobias", null, 0, 0, 0, null, null, null, null, null, null, null, null)); + null, "tobias", null, 0, 0, 0, null, null, null, null, null, null, null, null, null, + null, null, null, null)); var id = UUID.randomUUID().toString(); var code = @@ -183,7 +184,8 @@ void redeem_idToken() throws JOSEException, ParseException { new IdTokenJWS( null, new IdToken( - null, "tobias", null, 0, 0, 0, null, null, null, null, null, null, null, null)); + null, "tobias", null, 0, 0, 0, null, null, null, null, null, null, null, null, null, + null, null, null, null)); var code = new Code( diff --git a/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/ws/TokenEndpointTest.java b/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/ws/TokenEndpointTest.java index 97afe71..e104ddf 100644 --- a/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/ws/TokenEndpointTest.java +++ b/ehealthid-rp/src/test/java/com/oviva/ehealthid/relyingparty/ws/TokenEndpointTest.java @@ -16,8 +16,6 @@ import org.junit.jupiter.api.Test; class TokenEndpointTest { - - private static final URI BASE_URI = URI.create("https://idp.example.com"); private static final URI REDIRECT_URI = URI.create("https://myapp.example.com"); @Test diff --git a/ehealthid/src/main/java/com/oviva/ehealthid/auth/IdTokenJWS.java b/ehealthid/src/main/java/com/oviva/ehealthid/auth/IdTokenJWS.java index 6b4f92a..0d6430c 100644 --- a/ehealthid/src/main/java/com/oviva/ehealthid/auth/IdTokenJWS.java +++ b/ehealthid/src/main/java/com/oviva/ehealthid/auth/IdTokenJWS.java @@ -18,10 +18,19 @@ public record IdToken( @JsonProperty("acr") String acr, @JsonProperty("amr") String amr, @JsonProperty("email") String email, - @JsonProperty("urn:telematik:claims:profession") String telematikProfession, + + // The gemspec says that the claim is "birthdate", but + // all other claims are prefixed with "urn:telematik:claims:". + // I decided to implement to spec but we will likely need to adapt this. + @JsonProperty("birthdate") String telematikBirthdate, + @JsonProperty("urn:telematik:claims:alter") String telematikAlter, + @JsonProperty("urn:telematik:claims:display_name") String telematikDisplayName, @JsonProperty("urn:telematik:claims:given_name") String telematikGivenName, + @JsonProperty("urn:telematik:claims:geschlecht") String telematikGeschlecht, + @JsonProperty("urn:telematik:claims:email") String telematikEmail, + @JsonProperty("urn:telematik:claims:profession") String telematikProfession, // for insured person (IP) the immutable part of the Krankenversichertennummer (KVNR) @JsonProperty("urn:telematik:claims:id") String telematikKvnr, - @JsonProperty("urn:telematik:claims:email") String telematikEmail) {} + @JsonProperty("urn:telematik:claims:organization") String telematikOrganization) {} }