0
0

(調査中)Java 11のHttpClientを使用してAWS Cognitoのトークンエンドポイントからトークンを取得する例

Last updated at Posted at 2024-06-17

必要な依存関係の追加

プロジェクトが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)にアクセスすることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0