Skip to content

Commit cd2beff

Browse files
committed
Prevent Impersonation Attacks
1 parent dee0fb8 commit cd2beff

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

oauth2/src/main/java/feign/auth/oauth2/core/clients/OpenIdProviderClient.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ public CompletableFuture<ClientRegistration> discover(
6363
@SuppressWarnings("unchecked")
6464
final Map<String, Object> jsonResponse =
6565
(Map<String, Object>) jsonDecoder.decode(response, Map.class);
66-
OpenIdProviderConfigurationResponse configuration =
66+
final OpenIdProviderConfigurationResponse configuration =
6767
OpenIdProviderConfigurationResponse.fromMap(jsonResponse);
68+
validateIssuer(clientRegistration, configuration);
6869
return toClientRegistration(clientRegistration, configuration);
6970
} else {
7071
final byte[] bytes = Util.toByteArray(response.body().asInputStream());
@@ -194,4 +195,24 @@ private static JWTCreator.Builder createJwt(final ClientRegistration clientRegis
194195
.withExpiresAt(new Date(System.currentTimeMillis() + 60 * 1000)) // 1 minute expiration
195196
.withJWTId(UUID.randomUUID().toString()); // Unique identifier
196197
}
198+
199+
/**
200+
* Prevent impersonation attack
201+
*
202+
* @see https://openid.net/specs/openid-connect-discovery-1_0.html#Impersonation
203+
*/
204+
private static void validateIssuer(
205+
final ClientRegistration clientRegistration,
206+
final OpenIdProviderConfigurationResponse configuration) {
207+
final String originalIssuer =
208+
clientRegistration.getProviderDetails().getIssuerUri().replaceAll("/+$", "");
209+
final String configurationIssuer = configuration.getIssuer().replaceAll("/+$", "");
210+
211+
if (!originalIssuer.equals(configurationIssuer)) {
212+
throw new IllegalStateException(
213+
String.format(
214+
"Issuer in request mismatch issuer in configuration response.\nOriginal: %s\nConfiguration: %s",
215+
originalIssuer, configurationIssuer));
216+
}
217+
}
197218
}

0 commit comments

Comments
 (0)