Skip to content

Commit f95a467

Browse files
authored
Merge pull request #47296 from Postremus/issues/47284-no-double-append-email-oidc-dev
Do not append email suffix if already present in oidc dev service
2 parents 55ff02e + 9f7ae46 commit f95a467

File tree

3 files changed

+49
-14
lines changed

3 files changed

+49
-14
lines changed

extensions/devservices/oidc/src/main/java/io/quarkus/devservices/oidc/OidcDevServicesProcessor.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -714,9 +714,9 @@ private static String createIdToken(String user, Set<String> roles, String clien
714714
.audience(clientId)
715715
.subject(user)
716716
.upn(user)
717-
.claim("name", capitalize(user))
718-
.claim(Claims.preferred_username, user + "@example.com")
719-
.claim(Claims.email, user + "@example.com")
717+
.claim("name", buildNameClaimValue(user))
718+
.claim(Claims.preferred_username, buildEmailClaimValue(user))
719+
.claim(Claims.email, buildEmailClaimValue(user))
720720
.groups(roles)
721721
.jws()
722722
.keyId(kid)
@@ -731,15 +731,29 @@ private static String createAccessToken(String user, Set<String> roles, Set<Stri
731731
.subject(user)
732732
.scope(scope)
733733
.upn(user)
734-
.claim("name", capitalize(user))
735-
.claim(Claims.preferred_username, user + "@example.com")
736-
.claim(Claims.email, user + "@example.com")
734+
.claim("name", buildNameClaimValue(user))
735+
.claim(Claims.preferred_username, buildEmailClaimValue(user))
736+
.claim(Claims.email, buildEmailClaimValue(user))
737737
.groups(roles)
738738
.jws()
739739
.keyId(kid)
740740
.sign(kp.getPrivate());
741741
}
742742

743+
private static String buildNameClaimValue(String user) {
744+
if (user.contains("@")) {
745+
return capitalize(user.split("@")[0]);
746+
}
747+
return capitalize(user);
748+
}
749+
750+
private static String buildEmailClaimValue(String user) {
751+
if (user.contains("@")) {
752+
return user;
753+
}
754+
return user + "@example.com";
755+
}
756+
743757
/*
744758
* {"kty":"RSA",
745759
* "use":"sig",
@@ -801,13 +815,13 @@ private static void userInfo(RoutingContext rc) {
801815
{
802816
"preferred_username": "%1$s",
803817
"sub": "%2$s",
804-
"name": "%2$s",
805-
"family_name": "%2$s",
806-
"given_name": "%2$s",
807-
"email": "%3$s"
818+
"name": "%3$s",
819+
"family_name": "%3$s",
820+
"given_name": "%3$s",
821+
"email": "%4$s"
808822
}
809823
""".formatted(claims.getString(Claims.preferred_username.name()),
810-
claims.getString(Claims.sub.name()), claims.getString(Claims.email.name()));
824+
claims.getString(Claims.sub.name()), claims.getString("name"), claims.getString(Claims.email.name()));
811825
rc.response()
812826
.putHeader("Content-Type", "application/json")
813827
.endAndForget(data);

integration-tests/oidc-dev-services/src/main/java/io/quarkus/it/oidc/dev/services/SecuredResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public String getAdminOnly() {
4444
@GET
4545
@Path("user-only")
4646
public String getUserOnly() {
47-
return userInfo.getPreferredUserName() + " " + securityIdentity.getRoles();
47+
return userInfo.getPreferredUserName() + " " + securityIdentity.getRoles() + " " + userInfo.getName();
4848
}
4949

5050
@GET

integration-tests/oidc-dev-services/src/test/java/io/quarkus/it/oidc/dev/services/BearerAuthenticationOidcDevServicesTest.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void testLoginAsAlice() {
4949
.get("/secured/user-only")
5050
.then()
5151
.statusCode(200)
52-
.body(Matchers.containsString("alice"))
52+
.body(Matchers.startsWith("alice@example.com "))
5353
.body(Matchers.containsString("admin"))
5454
.body(Matchers.containsString("user"));
5555
}
@@ -66,10 +66,31 @@ public void testLoginAsBob() {
6666
.get("/secured/user-only")
6767
.then()
6868
.statusCode(200)
69-
.body(Matchers.containsString("bob"))
69+
.body(Matchers.startsWith("bob@example.com "))
7070
.body(Matchers.containsString("user"));
7171
}
7272

73+
@Test
74+
void testEmailAndName() {
75+
// test users get an @example.com appended if username is not an email address
76+
RestAssured.given()
77+
.auth().oauth2(getAccessToken("bob"))
78+
.get("/secured/user-only")
79+
.then()
80+
.statusCode(200)
81+
.body(Matchers.startsWith("[email protected] "))
82+
.body(Matchers.containsString(" Bob"));
83+
84+
// Test no additional @example.com is appended if requested username is likely already an email address
85+
RestAssured.given()
86+
.auth().oauth2(getAccessToken("[email protected]"))
87+
.get("/secured/user-only")
88+
.then()
89+
.statusCode(200)
90+
.body(Matchers.startsWith("[email protected] "))
91+
.body(Matchers.containsString(" Bob"));
92+
}
93+
7394
private String getAccessToken(String user) {
7495
return oidcTestClient.getAccessToken(user, user);
7596
}

0 commit comments

Comments
 (0)