AWS SDK for JavaScript v2 のサポート終了が間近に迫っていることが発表
Amazon Cognito アイデンティティを使用してユーザーを認証する
ブラウザスクリプトの AWS 認証情報を入手するには、Amazon Cognito アイデンティティ認証情報オブジェクトの AWS.CognitoIdentityCredentials
を使用することをお勧めします。Amazon Cognito では、サードパーティのアイデンティティプロバイダーによるユーザーの認証が可能です。
Amazon Cognito アイデンティティを使用するには、最初に Amazon Cognito コンソールでアイデンティティプールを作成する必要があります。ID プールは、アプリケーションがユーザーに提供する ID のグループを表します。ユーザーに与えられたアイデンティティは、各ユーザーアカウントを一意に識別します。Amazon Cognito ID は認証情報ではありません。これらは AWS Security Token Service (AWS STS) のウェブ ID フェデレーションサポートを使用して認証情報と交換されます。
Amazon Cognito は、AWS.CognitoIdentityCredentials
オブジェクトを使用して、複数のアイデンティティプロバイダーにわたるアイデンティティの抽象化を管理するのに役立ちます。ロードされた ID は AWS STS の認証情報と交換されます。
Amazon Cognito アイデンティティ認証情報オブジェクトの設定
まだ作成していない場合は、AWS.CognitoIdentityCredentials
を設定する前に Amazon Cognito コンソール
認証されていないユーザーは ID が検証されないため、このロールはアプリケーションのゲストユーザーに適切です。または、ユーザーの ID が検証されているかどうかが重要ではない場合に適切です。認証されているユーザーは、自分の ID を確認するサードパーティーの ID プロバイダーを介してアプリケーションにログインします。リソースの許可の範囲を適切に設定し、認証されていないユーザーからのアクセスを許可しないようにします。
アタッチ済みの ID プロバイダーで ID プールを設定すると、AWS.CognitoIdentityCredentials
を使用してユーザーを認証できます。AWS.CognitoIdentityCredentials
を使用するようにアプリケーションを設定するには、credentials
またはサービス別の設定の AWS.Config
プロパティを設定します。次の例では AWS.Config
を使用しています。
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030
',
Logins: { // optional tokens, used for authenticated login
'graph.facebook.com': 'FBTOKEN',
'www.amazon.com': 'AMAZONTOKEN',
'accounts.google.com': 'GOOGLETOKEN'
}
});
オプションの 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
}
});
s3 = new AWS.S3; // we can now create our service object
console.log('You are now logged in.');
} else {
console.log('There was a problem logging you in.');
}
});
認証されていないユーザーから認証されたユーザーへの切り替え
Amazon Cognito は、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダーのいずれにもログインしていない場合でも、リソースにアクセスできます。このレベルのアクセスは、ログインする前にユーザーにコンテンツを表示するのに便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも Amazon Cognito で一意のアイデンティティを持ちます。
認証されていないユーザーとしての開始
ユーザーは通常、認証されていないロールから開始します。このロールでは、Logins
プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト設定は次のようになります。
// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030
'
});
AWS.config.credentials = creds;
認証されたユーザーへの切り替え
認証されていないユーザーが ID プロバイダーにログインしたときに、トークンがあれば、カスタム関数を呼び出して認証情報オブジェクトを更新し Logins
トークンを追加することで、認証されていないユーザーを認証されたユーザーに切り替えることができます。
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
creds.params.Logins = creds.params.Logins || {};
creds.params.Logins[providerName] = token;
// Expire credentials to refresh them on the next request
creds.expired = true;
}
また、CognitoIdentityCredentials
オブジェクトを作成することもできます。その場合、作成した既存のサービスオブジェクトの認証情報プロパティをリセットする必要があります。サービスオブジェクトは、オブジェクトの初期化時にのみグローバル設定から読み込まれます。
CognitoIdentityCredentials
オブジェクトの詳細については、AWS SDK for JavaScript API リファレンスの AWS.CognitoIdentityCredentials
を参照してください。