必要な依存関係の追加
プロジェクトがMavenプロジェクトの場合、pom.xmlに以下の依存関係を追加します。
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
</dependencies>
Javaコード例
以下のコードは、Java 11のHttpClientを使用してAWS Cognitoのトークンエンドポイントからトークンを取得する方法を示します。
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.http.ResponseEntity;
public class CognitoTokenFetcher {
private static final String COGNITO_URL = "https://YOUR_COGNITO_DOMAIN/oauth2/token";
private static final String CLIENT_ID = "YOUR_CLIENT_ID";
private static final String CLIENT_SECRET = "YOUR_CLIENT_SECRET";
private static final String GRANT_TYPE = "client_credentials";
public static ResponseEntity<String> getToken() {
try {
HttpClient client = HttpClient.newHttpClient();
Map<Object, Object> data = new HashMap<>();
data.put("grant_type", GRANT_TYPE);
data.put("client_id", CLIENT_ID);
data.put("client_secret", CLIENT_SECRET);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(COGNITO_URL))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(buildFormDataFromMap(data))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
return ResponseEntity.ok(response.body());
} else {
return ResponseEntity.status(response.statusCode()).body(response.body());
}
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(500).body("Internal Server Error: " + e.getMessage());
}
}
private static HttpRequest.BodyPublisher buildFormDataFromMap(Map<Object, Object> data) {
String formData = data.entrySet()
.stream()
.map(entry -> URLEncoder.encode(entry.getKey().toString(), StandardCharsets.UTF_8) + "=" + URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8))
.collect(Collectors.joining("&"));
return HttpRequest.BodyPublishers.ofString(formData);
}
public static void main(String[] args) {
ResponseEntity<String> responseEntity = getToken();
System.out.println("Status Code: " + responseEntity.getStatusCode());
System.out.println("Body: " + responseEntity.getBody());
}
}
説明
1. Cognito URL:
COGNITO_URLを適切なCognitoドメインのURLに変更してください(例:https://your-domain.auth.region.amazoncognito.com/oauth2/token)。
2. クライアントIDとシークレット:
CLIENT_IDとCLIENT_SECRETを適切な値に設定してください。
3. フォームデータの作成:
buildFormDataFromMapメソッドは、URLエンコードされたフォームデータを作成します。
4. トークン取得リクエスト:
HttpClientを使用してPOSTリクエストを送信し、レスポンスを取得します。
5. レスポンスの処理:
成功時にはステータスコード200とトークンを含むボディが返され、失敗時にはエラーメッセージが返されます。
このコードを実行すると、AWS Cognitoからトークンが取得され、ResponseEntityとして返されます。これにより、必要なトークンを取得して、他のAWSサービス(例えばAWS SES)にアクセスすることができます。