サインイン後に ID プールを使用して AWS サービスへアクセスする
ユーザーがユーザープールを使用してサインインし、その後 ID プールを使用して AWS のサービスにアクセスできるようにすることが可能です。
認証が正常に行われると、ウェブまたはモバイルアプリが Amazon Cognito からユーザープールトークンを受け取ります。これらのトークンを使用して、アプリケーションが AWS のその他サービスにアクセスできるようにする AWS 認証情報を取得できます。詳細については、「Amazon Cognito ID プール (フェデレーティッド ID) の使用開始方法」を参照してください。
AWS リソースへのアクセスを制御するための ID プールとユーザープールグループの併用の詳細については、「ユーザープールにグループを追加する」および「ロールベースアクセスコントロール」を参照してください。また、ID プールと ID プールの概念 (フェデレーティッドアイデンティティ) の詳細については、「AWS Identity and Access Management」を参照してください。
AWS Management Console を使用したユーザープールのセットアップ
Amazon Cognito ユーザープールを作成し、クライアントアプリごとに [User Pool ID] (ユーザープール ID) と [App Client ID] (アプリクライアント ID) をメモしておきます。ユーザープール作成の詳細については、「ユーザープールの開始方法。」を参照してください。
AWS Management Console を使用した ID プールのセットアップ
次の手順で、AWS Management Consoleを使用して ID プールを 1 つ以上のユーザープールおよびクライアントアプリに統合する方法を説明します。
- Original console
-
ID プールを設定するには
-
Amazon Cognito コンソールを開きます。プロンプトが表示されたら、AWS 認証情報を入力します。
-
[Manage Identity Pools (ID プールの管理)] を選択します。
-
プロバイダーとしてAmazon Cognito ユーザープールを有効にする ID プールの名前を選択します。
-
[ダッシュボード] ページで、[ID プールの編集] を選択します。
-
[Authentication providers] セクションを展開します。
-
Cognitoを選択します。
-
[User Pool ID] (ユーザープール ID) を入力します。
-
[App Client ID] (アプリケーションクライアント ID) を入力します。これは、Amazon Cognito の AWS Management Consoleにある [Your User Pools] (ユーザープール) セクションでアプリケーションを作成したときに受け取ったものと同じクライアントアプリケーション ID である必要があります。
-
追加のアプリケーションまたはユーザープールがある場合は、[Add Another Provider] (別のプロバイダーの追加) を選択し、各ユーザープールのアプリケーションごとに [User Pool ID] (ユーザープール ID) および [App Client ID] (アプリケーションクライアント ID) に入力します。
-
追加するアプリまたはユーザープールがなくなった場合は、[変更の保存] を選択します。成功すると、「変更は正常に保存されました」というメッセージが [Dashboard] (ダッシュボード) ページに表示されます。
- New console
-
ID プールを設定するには
-
Amazon Cognito コンソールに移動します。プロンプトが表示されたら、AWS 認証情報を入力します。
-
[Federated identities] (フェデレーティッドアイデンティティ) を選択します。
-
プロバイダーとしてAmazon Cognito ユーザープールを有効にする ID プールの名前を選択します。
-
[ダッシュボード] ページで、[ID プールの編集] を選択します。
-
[Authentication providers] セクションを展開します。
-
Cognitoを選択します。
-
[User Pool ID] (ユーザープール ID) を入力します。
-
[App Client ID] (アプリケーションクライアント ID) を入力します。これは、コンソールの [User Pools] (ユーザープール) セクションでアプリケーションを作成したときに受け取ったものと同じクライアントアプリケーション ID である必要があります。
-
追加のアプリケーションまたはユーザープールがある場合は、[Add Another Provider] (別のプロバイダーの追加) を選択し、各ユーザープールのアプリケーションごとに [User Pool ID] (ユーザープール ID) および [App Client ID] (アプリケーションクライアント ID) に入力します。
-
追加するアプリまたはユーザープールがなくなった場合は、[変更の保存] を選択します。成功すると、「変更は正常に保存されました」というメッセージが [Dashboard] (ダッシュボード) ページに表示されます。
ユーザープールを ID プールと統合する
アプリユーザーが認証されると、認証情報プロバイダーのログインマップにユーザーのアイデンティティトークンを追加します。プロバイダー名は、Amazon Cognito ユーザープール ID に応じて異なります。次の構造になります。
cognito-idp.<region>
.amazonaws.com/<YOUR_USER_POOL_ID>
<region>
の値は、[ユーザープール ID] のリージョンと同じになります。例えば、cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789
です。
- JavaScript
-
var cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null) {
cognitoUser.getSession(function(err, result) {
if (result) {
console.log('You are now logged in.');
// Add the User's Id Token to the Cognito credentials login map.
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'YOUR_IDENTITY_POOL_ID
',
Logins: {
'cognito-idp.<region>
.amazonaws.com/<YOUR_USER_POOL_ID>
': result.getIdToken().getJwtToken()
}
});
}
});
}
- Android
-
cognitoUser.getSessionInBackground(new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession session) {
String idToken = session.getIdToken().getJWTToken();
Map<String, String> logins = new HashMap<String, String>();
logins.put("cognito-idp.<region>
.amazonaws.com/<YOUR_USER_POOL_ID>
", session.getIdToken().getJWTToken());
credentialsProvider.setLogins(logins);
}
});
- iOS - objective-C
-
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID
" clientSecret:@"YOUR_CLIENT_SECRET
" poolId:@"YOUR_USER_POOL_ID
"];
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"];
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID
" identityProviderManager:pool];
- iOS - swift
-
let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID
", clientSecret: "YOUR_CLIENT_SECRET
", poolId: "YOUR_USER_POOL_ID
")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")
let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID
", identityProviderManager:pool)