---
title: "sdk/java"
description: "SDK serveur Java 17+ pour la vérification JWT sans réseau,l'authentification des requêtes HTTP et la validation des signatureswebhook."
locale: "fr"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/fr/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# sdk/java

## Statut

Implémenté et vérifié localement. La vérification aller-retour avec unvrai IdP (récupération JWKS, signature/vérification de jeton contre uneinstance Vonvon active) n'a pas encore été effectuée et doit être complétéeavant toute utilisation en production.

Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n'utilisez pas de registre de paquets externe.

L'authentification des requêtes accepte uniquement Bearer par défaut. Un cookie JWT détenu par l'application n'est lu que lorsque son nom exact est configuré. Le cookie Core opaque \_\_Host-vonvon.rt.\* n'est jamais recherché ni vérifié localement ; échangez-le en transférant le header Cookie complet vers le POST /v1/sessions/token de même origine exacte, avec les redirections désactivées, et n'acceptez qu'une réponse contenant uniquement le champ token.

## Installer

Java 17+ et Maven requis.

```xml
<!-- First install the source checkout: cd sdk/java && mvn install -->
<dependency>
  <groupId>dev.vonvon</groupId>
  <artifactId>vonvon-sdk-java</artifactId>
  <version>0.1.0-alpha.0</version>
</dependency>
```

## Démarrage rapide

Construisez un seul `VonvonClient` au démarrage de l'application etutilisez-le comme singleton.

```java
import dev.vonvon.sdk.VonvonClient;
import dev.vonvon.sdk.VonvonClientOptions;
import dev.vonvon.sdk.VonvonClaims;
import dev.vonvon.sdk.VonvonTokenException;
import dev.vonvon.sdk.VonvonJwksException;

VonvonClient vonvon = VonvonClient.create(
VonvonClientOptions.builder()
    .issuer("https://vonvon.id")
    .audience("your-client-id")
    .webhookSecret("whsec_xxx")
    .build()
);

try {
VonvonClaims claims = vonvon.verifyToken(accessToken);
String userId = claims.getSub();
String scope  = claims.getScope();
} catch (VonvonTokenException e) {
response.sendError(401, "Unauthorized: " + e.getReason());
} catch (VonvonJwksException e) {
response.sendError(503, "Service unavailable");
}
```

## Authentifier une requête HTTP

```java
import dev.vonvon.sdk.AuthResult;

// Bearer-only by default
AuthResult result = vonvon.authenticateRequest(request.getHeader("Authorization"), null);

if (result.isAuthenticated()) {
String userId = result.getClaims().get().getSub();
} else {
response.sendError(401);
}

String token = vonvon.exchangeSessionToken(
request.getRequestURL().toString(),
request.getHeader("Cookie"),
"/v1/sessions/token"
);
```

## Vérifier le webhook

```java
import dev.vonvon.sdk.VonvonWebhookException;

byte[] rawBody = request.getInputStream().readAllBytes();
Map<String, String> headers = Map.of(
"svix-id",        request.getHeader("svix-id"),
"svix-timestamp", request.getHeader("svix-timestamp"),
"svix-signature", request.getHeader("svix-signature")
);

try {
vonvon.verifyWebhook(headers, rawBody);
} catch (VonvonWebhookException e) {
response.sendError(400, "Invalid webhook: " + e.getReason());
}
```

## VonvonClientOptions

| Méthode | Défaut | Description |
| --- | --- | --- |
| `.issuer(String)` | requis | Émetteur OIDC ; doit correspondre exactement au iss du jeton |
| `.audience(String)` | `null` | Aud attendue ; null ignore la validation |
| `.webhookSecret(String)` | `null` | Secret webhook (préfixe `whsec_` ou base64 brut) |
| `.jwksCacheDuration(Duration)` | 1 heure | TTL du cache JWKS en mémoire |
| `.clockSkewTolerance(Duration)` | 30 secondes | Tolérance au décalage d'horloge pour exp/nbf |
| `.connectTimeout(Duration)` | 5 secondes | Délai de connexion HTTP pour la récupération JWKS |
| `.readTimeout(Duration)` | 10 secondes | Délai de lecture HTTP pour la récupération JWKS |

## Notes de plateforme

- Utilise `nimbus-jose-jwt` pour l'analyse JWT/JWKS. ES256 estprincipal ; RS256 et PS256 sont pris en charge.
- Toutes les API publiques sont synchrones et thread-safe.
- Journalisation via la façade SLF4J ; apportez votre propre implémentation(Logback, Log4j2).
- Hiérarchie d'exceptions : `VonvonException` -&gt; `VonvonTokenException`,`VonvonJwksException`, `VonvonWebhookException`.

Source: https://vonvon.id/fr/sdks/java/index.mdx
