サインイン後に ID プールを使用して AWS サービスへアクセスする - Amazon Cognito

サインイン後に ID プールを使用して AWS サービスへアクセスする

ユーザーがユーザープールを使用してサインインし、その後 ID プールを使用して AWS のサービスにアクセスできるようにすることが可能です。

認証が正常に行われると、ウェブまたはモバイルアプリが Amazon Cognito からユーザープールトークンを受け取ります。これらのトークンを使用して、アプリケーションが AWS のその他サービスにアクセスできるようにする AWS 認証情報を取得できます。詳細については、「Amazon Cognito ID プール (フェデレーティッド ID) の使用開始方法」を参照してください。


        ID プールとユーザープールを使用した AWS 認証情報へのアクセス

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 つ以上のユーザープールおよびクライアントアプリに統合する方法を説明します。

Amazon Cognito のユーザープール ID プロバイダー (IdP) を追加するには
  1. Amazon Cognito コンソール[ID プールの管理] をクリックします。アイデンティティプールを選択します。

  2. [ユーザーアクセス] タブを選択します。

  3. [ID プロバイダーを追加] を選択します。

  4. [Amazon Cognito ユーザープール] を選択します。

  5. ユーザープール IDアプリクライアント ID を入力します。

  6. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[ロール設定] を設定します。

    1. その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。Amazon Cognito ユーザープール IdP では、トークンの優先ロールクレームを持つロールを選択することもできます。cognito:preferred_role クレームの詳細については、「グループへの優先順位の値の割り当て」を参照してください。

      1. [ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースクレーム、クレームを比較するオペレータ、このロール選択と一致するおよびロール割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

      2. [トークンの優先ロールクレームを持つロールを選択] を選択した場合、Amazon Cognito はユーザーの cognito:preferred_role クレームでロールの認証情報を発行します。優先ロールクレームが存在しない場合、Amazon Cognito はロール解決に基づいて認証情報を発行します。

      3. [ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

  7. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

    1. プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

    2. sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピングを使用] を選択します。

    3. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

  8. [Save Changes] (変更を保存) を選択します。

ユーザープールを 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)