Générer un jeton d’accès

[AEM Forms as a Cloud Service]{class="badge informative"}

Un jeton d’accès est une information d’identification utilisée pour authentifier et autoriser les requêtes à une API REST. Il est généralement émis par un serveur d’authentification (tel qu’OAuth 2.0 ou OpenID Connect) après la connexion réussie d’un utilisateur ou d’une utilisatrice ou d’une application. Lors de l’appel d’une API Forms Document Services sécurisée, un jeton d’accès est inclus dans l’en-tête de la requête pour vérifier l’identité du client ou de la cliente.
Voici un exemple de requête d’envoi de jeton d’accès

POST /api/data HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1...

Le code suivant a été utilisé pour générer le jeton d’accès.

import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AccessTokenService {
    private static final Logger logger = LoggerFactory.getLogger(AccessTokenService.class);

    public String getAccessToken() {
        ClassLoader classLoader = AccessTokenService.class.getClassLoader();

        try (InputStream inputStream = classLoader.getResourceAsStream("credentials/server_credentials.json")) {
            if (inputStream == null) {
                logger.error("File not found: credentials/server_credentials.json");
                throw new IllegalArgumentException("Missing credentials file");
            }

            try (InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
                 CloseableHttpClient httpClient = HttpClients.createDefault()) {

                JsonObject jsonObject = JsonParser.parseReader(reader).getAsJsonObject();
                String clientId = jsonObject.get("clientId").getAsString();
                String clientSecret = jsonObject.get("clientSecret").getAsString();
                String adobeIMSV3TokenEndpointURL = jsonObject.get("adobeIMSV3TokenEndpointURL").getAsString();
                String scopes = jsonObject.get("scopes").getAsString();

                HttpPost request = new HttpPost(adobeIMSV3TokenEndpointURL);
                request.setHeader("Content-Type", "application/x-www-form-urlencoded");

                String requestBody = "grant_type=client_credentials&client_id=" + clientId +
                        "&client_secret=" + clientSecret +
                        "&scope=" + scopes;

                request.setEntity(new StringEntity(requestBody, ContentType.APPLICATION_FORM_URLENCODED));

                logger.info("Requesting access token from {}", adobeIMSV3TokenEndpointURL);

                try (CloseableHttpResponse response = httpClient.execute(request)) {
                    String responseString = EntityUtils.toString(response.getEntity());
                    JsonObject jsonResponse = JsonParser.parseString(responseString).getAsJsonObject();

                    if (!jsonResponse.has("access_token")) {
                        logger.error("Access token not found in response: {}", responseString);
                        return null;
                    }

                    String accessToken = jsonResponse.get("access_token").getAsString();
                    logger.info("Successfully obtained access token.");
                    return accessToken;
                }
            }
        } catch (Exception e) {
            logger.error("Error fetching access token", e);
        }
        return null;
    }
}

La classe AccessTokenService est chargée de récupérer un jeton d’accès OAuth à partir du service d’authentification IMS d’Adobe. Elle lit les informations d’identification du client ou de la cliente à partir d’un fichier JSON (server_credentials.json), crée une demande d’authentification et l’envoie au point d’entrée du jeton Adobe. La réponse est ensuite analysée pour extraire le jeton d’accès, qui est utilisé pour les appels API sécurisés. La classe inclut un enregistrement et une gestion des erreurs appropriés pour garantir la fiabilité et un débogage plus facile.

Étapes suivantes

Effectuer des appels API

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69