Java

【Java】Amazon Cognitoのユーザープールを使用する方法

2020年8月13日

はじめに(前準備)

Java用のSDK(AWS SDK for Java 1.11)でAmazon Cognitoのユーザープールを使用する方法を紹介します。

前準備として、AWS マネジメントコンソールからユーザープールを作成する必要があります。※本記事では、ユーザープールの作成は省略しています。

スポンサーリンク

pom.xml

まずはAWSのJDKを使う設定をします。pomの場合は、次の内容を追加してユーザープール用のSDKを使用できるようにします。

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk-cognitoidp</artifactId>
  <version>1.11.828</version>
</dependency>

クレデンシャル(認証情報)の取得

クレデンシャル(credential)情報を取得することでAWSCognitoIdentityProviderを生成することでができます。AWSCognitoIdentityProviderを生成することで、提供されているユーザープールのAPIを使用することができます。ユーザープールのAPI Referenceは 以下の公式サイトをご覧ください。

API Reference:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference

Profileを使用

AWS CLIを使いProfileを作成している場合は、下記の方法でクレデンシャル(credential)情報を取得しAWSCognitoIdentityProviderを生成することができます。

AWSCredentialsProvider credentialsProvider = new ProfileCredentialsProvider("プロファイル名");

AWSCognitoIdentityProvider userPoolClient = AWSCognitoIdentityProviderClientBuilder.standard()
        .withCredentials(credentialsProvider)
        .withRegion(Regions.AP_NORTHEAST_1)
        .build();

※Profileは AWS CLI がインストールされているOSで次のコマンドを実行することが作成できます。

$ aws configure --profile プロファイル名

キー情報を直接指定

Profileを使わずに「アクセスキー」と「シークレットキー」を直接指定することで、クレデンシャル(credential)情報を取得しAWSCognitoIdentityProviderを生成することもできます。

AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");

AWSCognitoIdentityProvider userPoolClient = AWSCognitoIdentityProviderClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(credentials))
        .withRegion(Regions.AP_NORTHEAST_1)
        .build();

認証処理(ユーザープールのAPIを呼び出す)

サーバ側の認証は「AdminInitiateAuth」を使用します。認証が成功すると、アクセストークを取得することができます。

次の例では、「AdminInitiateAuth」で認証した後に、「GetUser」でユーザー情報を取得、そして「AdminListGroupsForUser」でユーザーが所属しているグループ情報を取得しています。

Map<String, String> authParam = new HashMap<>();
authParam.put("USERNAME", "ユーザー名");
authParam.put("PASSWORD", "パスワード");

AdminInitiateAuthRequest request = new AdminInitiateAuthRequest();
request
    .withAuthFlow(AuthFlowType.ADMIN_NO_SRP_AUTH)
    .withUserPoolId("ユーザープールID")
    .withClientId("クライアントID")
    .withAuthParameters(authParam);

AdminInitiateAuthResult authResult = userPoolClient.adminInitiateAuth(request);

System.out.println("アクセストークン:" + authResult.getAuthenticationResult().getAccessToken());

GetUserRequest userRequest = new GetUserRequest();
userRequest.setAccessToken(authResult.getAuthenticationResult().getAccessToken());
GetUserResult user = userPoolClient.getUser(userRequest);

System.out.println("ユーザー名:" + user.getUsername());

AdminListGroupsForUserRequest adGroupsUserRequest = new AdminListGroupsForUserRequest();
adGroupsUserRequest.setUsername(user.getUsername());
adGroupsUserRequest.setUserPoolId("ユーザープールID");
AdminListGroupsForUserResult groupsForUserResult = userPoolClient.adminListGroupsForUser(adGroupsUserRequest);

System.out.println("グループ名:" + groupsForUserResult.getGroups().get(0).getGroupName());

終わりに

Amazon Cognitoのユーザープールを使用する方法について紹介しました。

次回は「Amazon CognitoのIDプールの使い方」について紹介します。

[AWS 関連記事]

helpful