

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# OIDC プロバイダーをアイデンティティプール IdP として設定する
<a name="open-id"></a>

[OpenID Connect](http://openid.net/connect/) は認証のためのオープン標準で、多数のログインプロバイダーでサポートされています。Amazon Cognito を使用すると、[AWS Identity and Access Management](https://aws.amazon.com/iam/) を使用して設定した OpenID Connect プロバイダーと ID をリンクできます。

**OpenID Connect プロバイダーの追加**

*OpenID Connect プロバイダーの作成方法については、AWS Identity and Access Management  ユーザーガイド*の「[OpenID Connect (OIDC) ID プロバイダーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-oidc.html)」を参照してください。

**Amazon Cognito とのプロバイダーの関連付け**

**OIDC ID プロバイダー (IdP) を追加するには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)で **[ID プールの管理]** をクリックします。アイデンティティプールを選択します。

1. **[ユーザーアクセス]** タブを選択します。

1. **[ID プロバイダーを追加]** を選択します。

1. **[OpenID Connect (OIDC)]** を選択します。

1.  AWS アカウント 内の IAM IdP から **OIDC ID プロバイダー**を選択します。新しい SAML プロバイダーを追加する場合は、**[新しいプロバイダの作成]** を選択して IAM コンソールに移動します。

1. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[**ロール設定**] を設定します。

   1. その IdP のユーザーに、**認証済みロール**を設定したときに設定した**デフォルトロール**を割り当てることも、**ルール付きのロールを選択**することもできます。

     1. **[ルールを使用してロールを選択]** を選択した場合は、ユーザー認証のソース**クレーム**、クレームを比較する**演算子**、選択したロールと一致させる**値**、および**ロールの割り当て**が一致したときに割り当てる**ロール**を入力します。別の条件に基づいて追加のルールを作成するには、**[別のものを追加]** を選択します。

     1. **[ロールの解決]** を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、**認証済みロール**の認証情報を発行できます。

1. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、**[アクセスコントロールの属性]** を設定します。

   1. プリンシパルタグを適用しない場合は、**[非アクティブ]** を選択します。

   1. `sub` および `aud` クレームに基づいてプリンシパルタグを適用するには、**[デフォルトマッピングを使用]** を選択します。

   1. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、**[カスタムマッピングを使用]** を選択します。次に、タグに表示したい各**クレーム**から取得する**タグキー**を入力します。

1. **[変更を保存]** を選択します。

複数の OpenID Connect プロバイダーを、単一の ID プールと関連付けることができます。

**OpenID Connect の使用**

サインインして ID トークンを受け取る方法については、プロバイダーのドキュメントを参照してください。

トークンを取得したら、ログインマップにトークンを追加します。プロバイダーの URI をキーとして使用します。

**OpenID Connect トークンの検証**

初めて Amazon Cognito と統合するときは、`InvalidToken` 例外を受け取る場合があります。Amazon Cognito が OpenID Connect (OIDC) トークンを検証する方法を理解しておくことが重要です。

**注記**  
[https://tools.ietf.org/html/rfc7523](https://tools.ietf.org/html/rfc7523) で規定されているように、Amazon Cognito では、システム間のクロックスキューを処理するために 5 分の猶予期間が提供されます。

1. `iss` パラメータは、ログインマップで使われるキー (login.provider.com など) と一致する必要があります。

1. 署名が有効である必要があります。署名は、RSA パブリックキーを通じて検証可能である必要があります。
**注記**  
アイデンティティプールは、OIDC IdP 署名キーのキャッシュを短期間保持します。プロバイダーが署名キーを変更すると、このキャッシュが更新されるまで、Amazon Cognito が `NoKeyFound` エラーを返す可能性があります。このエラーが発生した場合は、アイデンティティプールが署名キーを更新するまで約 10 分待ちます。

1. 証明書の公開キーのフィンガープリントは、OIDC プロバイダーを作成したときに IAM で設定したフィンガープリントと一致します。

1. `azp` パラメータが存在する場合は、OIDC プロバイダーでリストされたクライアント ID に対してこの値を確認します。

1. `azp` パラメータが存在しない場合は、OIDC プロバイダーでリストされたクライアント ID に対して `aud` パラメータを確認します。

ウェブサイトの [jwt.io](http://jwt.io/) は、これらの値を検証するためのトークンをデコードするための貴重なリソースです。

## Android
<a name="set-up-open-id-1.android"></a>

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("login.provider.com", token);
credentialsProvider.setLogins(logins);
```

## iOS - Objective-C
<a name="set-up-open-id-1.ios-objc"></a>

```
credentialsProvider.logins = @{ "login.provider.com": token }
```

## JavaScript
<a name="set-up-open-id-1.javascript"></a>

```
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
 IdentityPoolId: 'IDENTITY_POOL_ID',
 Logins: {
    'login.provider.com': token
 }
});
```