Ce module fournit une implémentation complÚte et sécurisée du protocole OpenID Connect 1.0.
/.well-known/openid-configuration.iss), de lâaudience (aud) et de lâexpiration (exp).Voici comment implĂ©menter un flux OIDC standard (Discovery + Auth + Validation) :
// 1. Initialisation avec Auto-découverte (Google par exemple)
OidcDiscoveryService discovery = new OidcDiscoveryService();
OidcProviderMetadata metadata = discovery.discover("https://accounts.google.com");
OidcService service = new OidcServiceBuilder(clientId)
.apiSecret(clientSecret)
.callback(callbackUrl)
.defaultScope("openid profile email")
.build(new DefaultOidcApi20(metadata));
// 2. Génération de l'URL d'autorisation
String authUrl = service.getAuthorizationUrl();
// 3. Ăchange du code contre des jetons
OpenIdOAuth2AccessToken token = service.getAccessToken(new AuthorizationCodeGrant(code));
// 4. Validation de l'ID Token (Signature + Claims)
IdTokenValidator validator = new IdTokenValidator(metadata.getIssuer(), clientId);
IdToken idToken = service.extractIdToken(token);
validator.validate(idToken, nonce, System.currentTimeMillis());
System.out.println("Utilisateur authentifié : " + idToken.getSubject());
Lâutilisation dâOpenID Connect nĂ©cessite souvent une sĂ©curitĂ© renforcĂ©e :
IdTokenValidator validator = new IdTokenValidator(expectedIssuer, clientId);
IdToken idToken = IdToken.parse(rawIdToken);
validator.validate(idToken);
OAuthRequest request = new OAuthRequest(Verb.GET, service.getMetadata().getUserinfoEndpoint());
service.signRequest(token, request);
try (Response response = service.execute(request)) {
UserInfoJsonExtractor extractor = UserInfoJsonExtractor.instance();
Map<String, Object> claims = extractor.extract(response.getBody());
System.out.println("Email : " + claims.get("email"));
}