はじめに(前準備)
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でパスワードを変更する方法