はじめに(前準備)
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 関連記事]
- Amazon S3へファイルをアップロードする方法
- Amazon S3からファイルをダウンロードする方法
- 【Amazon Cognito】JavaScriptでログイン処理を実装する方法
- 【Amazon Cognito】getSessionでトークン情報を再取得する方法
- 【Amazon Cognito】changePasswordでパスワードを変更する方法
