

AWS SDK for JavaScript v2 はサポート終了となりました。[AWS SDK for JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/) に移行することをお勧めします。その他の詳細、移行方法については、こちらの[発表内容](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)を参照してください。

# Amazon Cognito アイデンティティを使用してユーザーを認証する
<a name="loading-browser-credentials-cognito"></a>

ブラウザスクリプトの 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 アイデンティティ認証情報オブジェクトの設定
<a name="browser-cognito-configuration"></a>

まだ作成していない場合は、`AWS.CognitoIdentityCredentials` を設定する前に [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito)でブラウザスクリプトによりアイデンティティプールを作成してください。アイデンティティプール用の認証済み IAM ロールと未認証 IAM ロールの両方を作成して関連付けます。

認証されていないユーザーは 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[ の ](https://developers.facebook.com/docs/facebook-login/web) 関数を使用して 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
      }
    });

    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.');
  }
});
```

## 認証されていないユーザーから認証されたユーザーへの切り替え
<a name="browser-switching-unauthenticated-users"></a>

Amazon Cognito は、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダーのいずれにもログインしていない場合でも、リソースにアクセスできます。このレベルのアクセスは、ログインする前にユーザーにコンテンツを表示するのに便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも Amazon Cognito で一意のアイデンティティを持ちます。

### 認証されていないユーザーとしての開始
<a name="browser-switching-initially-unauthenticated-user"></a>

ユーザーは通常、認証されていないロールから開始します。このロールでは、`Logins` プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト設定は次のようになります。

```
// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
 IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030'
});
AWS.config.credentials = creds;
```

### 認証されたユーザーへの切り替え
<a name="switch-to-authenticated"></a>

認証されていないユーザーが 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 リファレンスの [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html) を参照してください。