認証情報の取得 - 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 コンソールを開き、[Manage Identity Pools] (ID プールの管理) を選択し、ID プールを選択して、[Edit Identity Pool] (ID プールの編集) を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Android

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

  1. Amazon Cognito コンソールで [Manage Federated Identities] (フェデレーティッド 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. 使用される AWS クライアントのコンストラクタに、初期化された Amazon Cognito 認証情報プロバイダーを渡します。必要なコードは、初期化するサービスによって異なります。クライアントはこのプロバイダーを使用して、AWS リソースにアクセスするための認証情報を取得します。

    注記

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

Amazon Cognito アイデンティティの取得

認証されていないユーザーを許可している場合は、エンドユーザーの固有 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 コンソールで [Manage Federated Identities] (フェデレーティッド 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 コンソールを開き、[Manage Identity Pools] (ID プールの管理) を選択し、ID プールを選択して、[Edit Identity Pool] (ID プールの編集) を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito アイデンティティの取得

エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ 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 コンソールで [Manage Federated dentities] (フェデレーティッド 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 コンソールを開き、[Manage Identity Pools] (ID プールの管理) を選択し、ID プールを選択して、[Edit Identity Pool] (ID プールの編集) を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito アイデンティティの取得

エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ 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 プールをまだ作成していない場合は、AWS.CognitoIdentityCredentials を使用する前に Amazon Cognito コンソールで ID プールを作成してください。

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', 'appleid.apple.com': 'APPLETOKEN' } }); // 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 プロバイダーとして使用する場合は、FB.loginFacebook SDK 関数を使用して 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 アイデンティティの取得

エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユーザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイダーでログイントークンを設定した後で取得することができます。

var identityId = AWS.config.credentials.identityId;

Unity

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

  1. Amazon Cognito コンソールで [Manage Identity Pools] (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 コンソールを開き、[Manage Identity Pools] (ID プールの管理) を選択し、ID プールを選択して、[Edit Identity Pool] (ID プールの編集) を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito アイデンティティの取得

エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ 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 コンソールで [Manage Identity Pools] (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 コンソールを開き、[Manage Identity Pools] (ID プールの管理) を選択し、ID プールを選択して、[Edit Identity Pool] (ID プールの編集) を選択します。次に、認証されたロールと認証されていないロールを指定し、変更を保存します。

Amazon Cognito アイデンティティの取得

エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユーザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイダーでログイントークンを設定した後で取得することができます。

var identityId = await credentials.GetIdentityIdAsync();