Generera åtkomsttoken
[AEM Forms as a Cloud Service]{class="badge informative"}
En åtkomsttoken är en autentiseringsuppgift som används för att autentisera och auktorisera begäranden till ett REST API. Den utfärdas vanligtvis av en autentiseringsserver (till exempel OAuth 2.0 eller OpenID Connect) efter att en användare eller ett program har loggat in. När du anropar en skyddad Forms Document Services API, inkluderas en åtkomsttoken i begärandehuvudet för att verifiera klientens identitet.
Följande är ett exempel på begäran om att skicka åtkomsttoken
POST /api/data HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1...
Följande kod användes för att generera åtkomsttoken
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;
}
}
Klassen AccessTokenService hämtar en OAuth-åtkomsttoken från Adobe IMS-autentiseringstjänst. Den läser klientautentiseringsuppgifter från en JSON-fil (server_credentials.json), konstruerar en autentiseringsbegäran och skickar den till Adobe tokenslutpunkt. Svaret tolkas sedan för att extrahera åtkomsttoken, som används för säkra API-anrop. Klassen innehåller korrekt loggning och felhantering för att säkerställa tillförlitlighet och enklare felsökning.