ScribeJava v9 intĂšgre les derniers standards de sĂ©curitĂ© de lâIETF pour protĂ©ger vos Ă©changes OAuth 2.0.
Le DPoP empĂȘche lâutilisation dâun jeton volĂ© en le liant mathĂ©matiquement Ă une paire de clĂ©s privĂ©e/publique dĂ©tenue par le client.
// 1. Créez un générateur de preuve (fourni dans le module OIDC)
DefaultDPoPProofCreator proofCreator = new DefaultDPoPProofCreator(myKeyPair);
// 2. Configurez le service
OAuth20Service service = new ServiceBuilder(clientId)
.apiSecret(secret)
.dpopProofCreator(proofCreator) // Active DPoP pour tous les échanges
.build(GoogleApi20.instance());
// Les jetons obtenus seront de type 'DPoP' et les requĂȘtes signĂ©es automatiquement.
Le PAR (RFC 9126) amĂ©liore la sĂ©curitĂ© en envoyant les paramĂštres dâautorisation directement au serveur via une requĂȘte POST sĂ©curisĂ©e, plutĂŽt que de les faire transiter par lâURL du navigateur.
// ScribeJava gĂšre le PAR automatiquement si l'API le supporte
PushedAuthorizationResponse parResponse = service.pushAuthorizationRequest(new AuthorizationCodeGrant(code));
// Redirigez l'utilisateur vers l'URI fournie par le serveur
String authUrl = parResponse.getRequestUri();
Avant de déployer votre intégration, vérifiez ces 5 points :
.pkce(true) dans votre ServiceBuilder ?callback) et endpoints sont-ils tous en HTTPS ?apiSecret est-il chargĂ© via une variable dâenvironnement (et non en dur) ?iss + aud) ?Pour empĂȘcher lâaltĂ©ration des paramĂštres de la requĂȘte dâautorisation (ex: injection de redirect_uri malveillant), vous pouvez signer la requĂȘte.
Utilisez JarAuthorizationRequestConverter (du module scribejava-oidc) dans le builder.
// Clé privée pour signer le JWT
JWK signingKey = JWK.parse("{\"kty\":\"RSA\", ...}");
OAuth20Service service = new ServiceBuilder("client-id")
.apiSecret("secret")
.callback("https://callback.com")
// Active JAR : Convertit les params en JWT signé
.authorizationRequestConverter(
new JarAuthorizationRequestConverter(
"client-id", // issuer
"https://issuer.com", // audience (l'IDP)
signingKey,
JWSAlgorithm.RS256
)
)
.build(OidcGoogleApi20.instance());
// L'URL générée contiendra ?client_id=...&request=eyJ...
String url = service.getAuthorizationUrl();
Si vous activez Ă la fois JAR et PAR, ScribeJava enverra le JWT signĂ© (request) directement au serveur via lâappel API PAR (POST /par). Câest la configuration la plus sĂ©curisĂ©e possible.
// JAR + PAR = Sécurité Maximale
OAuth20Service service = new ServiceBuilder("client-id")
.authorizationRequestConverter(new JarAuthorizationRequestConverter(...)) // JAR
.build(GoogleApi20.instance());
// Pousse le JWT signé au serveur
PushedAuthorizationResponse response = service.pushAuthorizationRequestAsync(...).get();