認証情報の取得
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 月より前に作成したアイデンティティプールの場合で、ロールをパラメータとせずに AWS.CognitoIdentityCredentials
コンストラクターを使用するには、再度そのロールと ID プールの関連付けを行う必要があります。これを実行するには、Amazon Cognito コンソール
ウェブ ID 認証情報プロバイダーは、AWS SDK のデフォルトの認証情報プロバイダーチェーンの一部です。アイデンティティプールトークンを AWS SDK または AWS CLI のローカル config
ファイルに設定するには、web_identity_token_file
プロファイルエントリを追加します。AWS SDK およびツールリファレンスガイドの「ロール認証情報プロバイダーを引き受ける」を参照してください。
SDK にウェブ ID 認証情報を入力する方法の詳細については、SDK ディベロッパーガイドを参照してください。最良の結果を得るには、AWS Amplify に組み込まれているアイデンティティプール統合からプロジェクトを開始してください。
AWSアイデンティティプールを使用して認証情報を取得および設定するための SDK リソース
-
Amplify Dev Center のアイデンティティプールフェデレーション
(Android) -
Amplify Dev Center のアイデンティティプールフェデレーション
(iOS) -
AWS SDK for JavaScript ディベロッパーガイドの「Amazon Cognito アイデンティティを使用してユーザー認証をする」
-
AWS SDK for .NET ディベロッパーガイドの「Amazon Cognito 認証情報プロバイダー」
-
AWS SDK for Go ディベロッパーガイドの「資格情報をプログラムで指定する
」 -
AWS SDK for Java 2.x ディベロッパーガイドの「コードに一時的な認証情報を入力する」
-
AWS SDK for PHP ディベロッパーガイドの「assumeRoleWithWebIdentityCredentialProvider プロバイダー」
-
AWS SDK for Python (Boto3) ドキュメントの「ウェブ ID プロバイダーの役割を引き受ける
」 -
AWS SDK for Rust ディベロッパーガイドの「認証情報とデフォルトリージョンの指定」
以下のセクションは、一部のレガシー AWS SDK のサンプルコードを示します。
Amazon Cognito を使用して権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスできるようにすることが可能です。Amazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。アプリケーションに AWS 認証情報を提供するには、以下の手順を実行します。
Android アプリで Amazon Cognito アイデンティティプールを使用するには、AWS Amplify をセットアップします。詳細については、Amplify Dev Center の「認証
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 を実行すると、アプリで自動的にエラーが発生し、NetworkOnMainThreadExceptionAsyncTask
を使用して、バックグラウンドスレッドにコードを移動する必要があります。詳細については、「Android のドキュメントgetCachedIdentityId()
を呼び出して ID を取得することもできますが、この操作が可能なのは、既に ID がローカルにキャッシュされている場合のみです。それ以外の場合、メソッドは null を返します。
Amazon Cognito を使用して権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスできるようにすることが可能です。Amazon Cognito ID プールは、認証された ID と認証されていない ID の両方をサポートします。アプリケーションに AWS 認証情報を提供するには、以下の手順を実行します。
iOS アプリで Amazon Cognito アイデンティティプールを使用するには、AWS Amplify をセットアップします。詳細については、Amplify Dev Center の「Swift 認証
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
が返されます。詳細については、Amplify iOS SDK リファレンス
権限が制限された一時的な認証情報をアプリケーションに提供するために、Amazon Cognito を使用できます。これにより、ユーザーは AWS リソースにアクセスできるようになります。Amazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。アプリケーションに AWS 認証情報を提供するには、以下の手順を実行します。
iOS アプリで Amazon Cognito アイデンティティプールを使用するには、AWS Amplify をセットアップします。詳細については、Amplify Dev Center の「Swift 認証
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
が返されます。詳細については、Amplify iOS SDK リファレンス
ID プールをまだ作成して AWS.CognitoIdentityCredentials
を使用する前に Amazon Cognito コンソール
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.login
Facebook SDK の
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;
Amazon Cognito を使用して権限が制限されている一時的な認証情報をアプリケーションに提供し、ユーザーが AWS リソースにアクセスできるようにすることが可能です。Amazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。アプリケーションに AWS 認証情報を提供するには、以下の手順を実行します。
AWS SDK for Unity も、AWS SDK for .NET の一部になりました。AWS SDK for .NET で Amazon Cognito を使い始めるには、AWS SDK for .NET ディベロッパーガイドの「Amazon Cognito 認証情報プロバイダー」を参照してください。または、AWS Amplify でアプリを構築するためのオプションについては、Amplify Dev Center
Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユーザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイダーでログイントークンを設定した後で取得することができます。
credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) { if (result.Exception != null) { //Exception! } string identityId = result.Response; });
権限が制限された一時的な認証情報をアプリケーションに提供するために、Amazon Cognito を使用できます。これにより、ユーザーは AWS リソースにアクセスできるようになります。Amazon Cognito は、認証されている ID と認証されていない ID の両方をサポートします。アプリケーションに AWS 認証情報を提供するには、以下の手順を実行します。
AWS SDK for Xamarin も、AWS SDK for .NET の一部になりました。AWS SDK for .NET で Amazon Cognito を使い始めるには、AWS SDK for .NET ディベロッパーガイドの「Amazon Cognito 認証情報プロバイダー」を参照してください。または、AWS Amplify でアプリを構築するためのオプションについては、Amplify Dev Center
注記
注: 2015 年 2 月より前に作成した ID プールで、ロールをパラメータとせずに、このコンストラクターを使用するには、再度そのロールと ID プールの関連付けを行う必要があります。これを実行するには、Amazon Cognito コンソール
Amazon Cognito アイデンティティの取得
エンドユーザー用の固有 Amazon Cognito 識別子 (アイデンティティ ID) は、認証されていないユーザーを許可している場合はただちに取得、またはユーザーを認証している場合は、認証情報プロバイダーでログイントークンを設定した後で取得することができます。
var identityId = await credentials.GetIdentityIdAsync();