Amazon Cognito
開発者ガイド

認証情報の取得

Amazon Cognito を使用して、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。このセクションでは、認証情報を取得する方法と、ID プールから Amazon Cognito ID を取得する方法について説明します。

Amazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。認証されていないユーザーは ID が検証されないため、このロールはアプリケーションのゲストユーザーに適切です。または、ユーザーの ID が検証されているかどうかが重要ではない場合に適切です。認証されているユーザーは、アプリケーションにログイン際にサードパーティーの ID プロバイダまたはユーザープールを通じて ID が検証されます。リソースのアクセス許可の範囲を適切に設定し、認証されていないユーザーからのアクセスを許可しないようにします。

Amazon Cognito ID は認証情報ではありません。これらは、AWS Security Token Service (AWS STS) でサポートされているウェブ ID フェデレーションを通じて認証情報と交換されます。アプリユーザーが AWS 認証情報を取得する方法としては、AWS.CognitoIdentityCredentials を使用することをお勧めします。認証情報オブジェクトの ID は、AWS STS を使用して認証情報と交換されます。

注記

2015 年 2 月より前に ID プールを作成した場合、AWS.CognitoIdentityCredentials を使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開き、[ID プールの管理] を選択し、ID プールを選択して、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Android

Amazon Cognito を使用すると、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。Amazon Cognito は認証された ID と認証されていない ID の両方をサポートしています。アプリに AWS 証明書を提供するには、次の手順に従います。

  1. Amazon Cognito コンソールで [ID プールの管理] を選択して、ID プールを作成し、スターターコードスニペットをコピーします。

  2. まだ行っていない場合は、AWS Mobile SDK for Android をプロジェクトに追加します。手順については、「Mobile SDK for Android のセットアップ」を参照してください。

  3. 次の import ステートメントを追加します。

    import com.amazonaws.auth.CognitoCachingCredentialsProvider; import com.amazonaws.regions.Regions;
  4. Amazon Cognito コンソールによって生成されたコードスニペットを使用して、Amazon Cognito 認証情報プロバイダーを初期化します。IDENTITY_POOL_ID の値はアカウントに固有のものになります。

    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), // Context "IDENTITY_POOL_ID", // Identity Pool ID Regions.US_EAST_1 // Region );
  5. 初期化された Amazon Cognito 認証情報プロバイダーを、使用する AWS クライアントのコンストラクタに渡します。必要なコードは、初期化するサービスによって異なります。クライアントはこのプロバイダーを使用して、AWS リソースにアクセスするための認証情報を取得します。

    注記

    2015 年 2 月以前に ID プールを作成した場合は、ロールなしでこのコンストラクタをパラメーターとして使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開いて [フェデレーテッドアイデンティティの管理] を選び、ID プールを選択したら、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito ID の取得

非認証ユーザーを許可している場合、すぐにエンドユーザーの固有 Amazon Cognito 識別子 (識別 ID) を取得できます。ユーザーを認証する場合、認証情報プロバイダでログイントークンを設定した後に識別 ID を取得できます。

String identityId = credentialsProvider.getIdentityId(); Log.d("LogTag", "my ID is " + identityId);

注記

アプリケーションのメインスレッドで、getIdentityId()refresh()、または getCredentials() を呼び出さないでください。Android 3.0 (API レベル 11) 時点では、メインアプリケーションスレッドでネットワーク I/O を実行すると、アプリで自動的にエラーが発生し、NetworkOnMainThreadException がスローされます。AsyncTask を使用して、バックグラウンドスレッドにコードを移動する必要があります。詳細については、「Android のドキュメント」を参照してください。getCachedIdentityId() を呼び出して ID を取得することもできますが、この操作が可能なのは、既に ID がローカルにキャッシュされている場合のみです。それ以外の場合、メソッドは null を返します。

iOS - Objective-C

Amazon Cognito を使用すると、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。Amazon Cognito ID プールは認証された ID と認証されていない ID の両方をサポートしています。アプリに AWS 証明書を提供するには、次の手順に従います。

  1. Amazon Cognito コンソールで [ID プールの管理] を選択して、ID プールを作成し、スターターコードスニペットをコピーします。

  2. まだ行っていない場合は、AWS Mobile SDK for iOS をプロジェクトに追加します。手順については、「Mobile SDK for iOS のセットアップ」を参照してください。

  3. ソースコードに、AWSCore ヘッダーを含めます。

    #import <AWSCore/AWSCore.h>
  4. Amazon Cognito コンソールによって生成されたコードスニペットを使用して、Amazon Cognito 認証情報プロバイダーを初期化します。IDENTITY_POOL_ID の値はアカウントに固有のものになります。

    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"IDENTITY_POOL_ID"]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;

    注記

    2015 年 2 月以前に ID プールを作成した場合は、ロールなしでこのコンストラクタをパラメーターとして使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開き、[ID プールの管理] を選択し、ID プールを選択して、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito ID の取得

認証されたユーザーを許可する場合や、認証されたユーザーの場合は認証情報プロバイダーでログイントークンを設定した後で、エンドユーザー用の一意の Amazon Cognito ID (アイデンティティ ID) をすぐに取得できます。

// Retrieve your Amazon Cognito ID [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"Error: %@", task.error); } else { // the task result will contain the identity id NSString *cognitoId = task.result; } return nil; }];

注記

getIdentityId は非同期呼び出しです。アイデンティティ ID が既にプロバイダーで設定されている場合は、credentialsProvider.identityId を呼び出して(ローカルにキャッシュされた)その ID を取得できます。ただし、プロバイダーでアイデンティティ ID が設定されていない場合、credentialsProvider.identityId を呼び出すと nil が返されます。詳細については、Mobile SDK for iOS の API リファレンスを参照してください。

iOS - Swift

Amazon Cognito を使用すると、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。Amazon Cognito は認証された ID と認証されていない ID の両方をサポートしています。アプリに AWS 証明書を提供するには、次の手順に従います。

  1. Amazon Cognito コンソールで [ID プールの管理] を選択して、ID プールを作成し、スターターコードスニペットをコピーします。

  2. まだ行っていない場合は、Mobile SDK for iOS をプロジェクトに追加します。手順については、「SDK for iOS のセットアップ」を参照してください。

  3. ソースコードに、AWSCore ヘッダーを含めます。

    import AWSCore
  4. Amazon Cognito コンソールによって生成されたコードスニペットを使用して、Amazon Cognito 認証情報プロバイダーを初期化します。IDENTITY_POOL_ID の値はアカウントに固有のものになります。

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "IDENTITY_POOL_ID") let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration

    注記

    2015 年 2 月以前に ID プールを作成した場合は、ロールなしでこのコンストラクタをパラメーターとして使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開き、[ID プールの管理] を選択し、ID プールを選択して、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito ID の取得

認証されたユーザーを許可する場合や、認証されたユーザーの場合は認証情報プロバイダーでログイントークンを設定した後で、エンドユーザー用の一意の Amazon Cognito ID (アイデンティティ ID) をすぐに取得できます。

// Retrieve your Amazon Cognito ID credentialsProvider.getIdentityId().continueWith(block: { (task) -> AnyObject? in if (task.error != nil) { print("Error: " + task.error!.localizedDescription) } else { // the task result will contain the identity id let cognitoId = task.result! print("Cognito id: \(cognitoId)") } return task; })

注記

getIdentityId は非同期呼び出しです。アイデンティティ ID が既にプロバイダーで設定されている場合は、credentialsProvider.identityId を呼び出して(ローカルにキャッシュされた)その ID を取得できます。ただし、プロバイダーでアイデンティティ ID が設定されていない場合、credentialsProvider.identityId を呼び出すと nil が返されます。詳細については、Mobile SDK for iOS の API リファレンスを参照してください。

JavaScript

ID プールをまだ作成していない場合は、Amazon Cognito コンソールで ID プールを作成してから AWS.CognitoIdentityCredentials を使用してください。

ID プロバイダーで ID プールを設定すると、AWS.CognitoIdentityCredentials を使用してユーザーを認証できます。AWS.CognitoIdentityCredentials を使用するようにアプリケーションを設定するには、credentials またはサービス別の設定の AWS.Config プロパティを設定します。次の例では AWS.Config を使用しています。

// Set the region where your identity pool exists (us-east-1, eu-west-1) AWS.config.region = 'us-east-1'; // Configure the credentials provider to use your identity pool AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { // optional tokens, used for authenticated login 'graph.facebook.com': 'FBTOKEN', 'www.amazon.com': 'AMAZONTOKEN', 'accounts.google.com': 'GOOGLETOKEN' } }); // Make the call to obtain credentials AWS.config.credentials.get(function(){ // Credentials will be available when this function is called. var accessKeyId = AWS.config.credentials.accessKeyId; var secretAccessKey = AWS.config.credentials.secretAccessKey; var sessionToken = AWS.config.credentials.sessionToken; });

オプションの Logins プロパティは、ID プロバイダー名の ID トークンへのマッピングです。ID プロバイダーからのトークンの取得方法は、使用するプロバイダーによって異なります。たとえば、Facebook を ID プロバイダーとして使用する場合は、Facebook SDKFB.login 関数を使用して ID プロバイダートークンを取得します。

FB.login(function (response) { if (response.authResponse) { // logged in AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); } });

Amazon Cognito ID の取得

認証されたユーザーを許可する場合や、認証されたユーザーの場合は認証情報プロバイダーでログイントークンを設定した後で、エンドユーザー用の一意の Amazon Cognito ID (アイデンティティ ID) をすぐに取得できます。

var identityId = AWS.config.credentials.identityId;

Unity

Amazon Cognito を使用すると、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。Amazon Cognito は認証された ID と認証されていない ID の両方をサポートしています。アプリに AWS 証明書を提供するには、次の手順に従います。

  1. Amazon Cognito コンソールで [ID プールの管理] を選択して、ID プールを作成し、スターターコードスニペットをコピーします。

  2. まだ行っていない場合は、AWS Mobile SDK for Unity パッケージをダウンロードしてプロジェクトにインポートします。この操作は、[Assets] > [Import Package] > [Custom Package] メニューから行うことができます。

  3. コンソールから Amazon Cognito の呼び出し元のスクリプトに、初歩的なコードスニペットを貼り付けます。IDENTITY_POOL_ID の値はアカウントに固有のものになります。

    CognitoAWSCredentials credentials = new CognitoAWSCredentials ( "IDENTITY_POOL_ID", // Cognito Identity Pool ID RegionEndpoint.USEast1 // Region );
  4. 初期化された Amazon Cognito 認証情報を、使用する AWS クライアントのコンストラクタに渡します。必要なコードは、初期化するサービスによって異なります。クライアントはこのプロバイダーを使用して、AWS リソースにアクセスするための認証情報を取得します。

    注記

    2015 年 2 月以前に ID プールを作成した場合は、ロールなしでこのコンストラクタをパラメーターとして使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開き、[ID プールの管理] を選択し、ID プールを選択して、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito ID の取得

認証されたユーザーを許可する場合や、認証されたユーザーの場合は認証情報プロバイダーでログイントークンを設定した後で、エンドユーザー用の一意の Amazon Cognito ID (アイデンティティ ID) をすぐに取得できます。

credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) { if (result.Exception != null) { //Exception! } string identityId = result.Response; });

Xamarin

Amazon Cognito を使用すると、権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスするようにできます。Amazon Cognito は認証された ID と認証されていない ID の両方をサポートしています。アプリに AWS 証明書を提供するには、次の手順に従います。

  1. Amazon Cognito コンソールで [ID プールの管理] を選択して、ID プールを作成し、スターターコードスニペットをコピーします。

  2. まだ行っていない場合は、AWS Mobile SDK for Xamarin をプロジェクトに追加します。手順については、「SDK for Xamarin のセットアップ」を参照してください。

  3. 次の using ステートメントを含めます。

    using Amazon.CognitoIdentity;
  4. コンソールから Amazon Cognito の呼び出し元のスクリプトに、初歩的なコードスニペットを貼り付けます。IDENTITY_POOL_ID の値はアカウントに固有のものになります。

    CognitoAWSCredentials credentials = new CognitoAWSCredentials ( "IDENTITY_POOL_ID", // Cognito Identity Pool ID RegionEndpoint.USEast1 // Region );
  5. 初期化された Amazon Cognito 認証情報を、使用する AWS クライアントのコンストラクタに渡します。必要なコードは、初期化するサービスによって異なります。クライアントはこのプロバイダーを使用して、AWS リソースにアクセスするための認証情報を取得します。

注記

注意: 2015 年 2 月以前に ID プールを作成した場合は、ロールなしでこのコンストラクタをパラメータとして使用するには、ロールを ID プールと再度関連付ける必要があります。そのためには、Amazon Cognito コンソールを開き、[ID プールの管理] を選択し、ID プールを選択して、ID プールの編集を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito ID の取得

認証されたユーザーを許可する場合や、認証されたユーザーの場合は認証情報プロバイダーでログイントークンを設定した後で、エンドユーザー用の一意の Amazon Cognito ID (アイデンティティ ID) をすぐに取得できます。

var identityId = await credentials.GetIdentityIdAsync();