

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 OIDC 供應商設定為身分集區 IdP
<a name="open-id"></a>

[OpenID Connect](http://openid.net/connect/) 是一種用來進行身分驗證的開放標準，許多登入供應商皆支援。透過 Amazon Cognito，您可以將身分與透過 設定的 OpenID Connect 提供者連結[AWS Identity and Access Management](https://aws.amazon.com/iam/)。

**新增 OpenID Connect 供應商**

如需有關如何建立 OpenID Connect 供應商的詳細資訊，請參閱《AWS Identity and Access Management 使用者指南》中的[建立 OpenID Connect (OIDC) 身分提供者](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-oidc.html)。

**將供應商與 Amazon Cognito 相關聯**

**若要新增 OIDC 身分提供者 (IdP)**

1. 從 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)選擇 **身分池**。選取身分池。

1. 選擇 **使用者存取權** 索引標籤。

1. 選取 **新增身分供應商**。

1. 選擇 **OpenID Connect (OIDC)**。

1. 從您 AWS 帳戶中的 IAM IdP 選擇一個 **OIDC 身分提供者**。如果要新增新的 SAML 提供者，請選擇 **建立新的提供者** 以前往 IAM 主控台。

1. 若要設定 Amazon Cognito 向已通過此提供者進行身分驗證的使用者發布憑證時的角色，請設定 **角色設定**。

   1. 您可以為該 IdP 使用者指派設定 **已驗證角色** 時的 **預設角色**，或您可以 **選擇具有規則的角色**。

     1. 如果您選擇 **使用規則選擇角色**，請輸入使用者身分驗證的 **宣告** 來源、比較宣告的 **操作員**、導致符合角色選擇的 **值**，以及當符合 **角色指派** 時您要指派的 **角色**。選取 **新增另一項** 以根據不同的條件建立其他規則。

     1. 選擇 **角色解析**。當您的使用者宣告與您的規則不符時，您可以拒絕憑證或向 **已驗證角色** 發出憑證。

1. 若要變更透過此提供者驗證使用者，Amazon Cognito 發布憑證時指派的主要索引標籤，請設定 **存取控制的屬性**。

   1. 若不套用主要索引標籤，請選擇 **非作用中**。

   1. 若要根據 `sub` 和 `aud` 宣告套用主要索引標籤，請選擇 **使用預設對應**。

   1. 若要建立您自己的自訂屬性結構描述至主要索引標籤，請選擇 **使用自訂對應**。然後，輸入您要從每個 **宣告** 中獲取的 **標籤金鑰**，顯示於索引標籤當中。

1. 選取**儲存變更**。

您可以將多個 OpenID Connect 供應商與單一身分集區相關聯。

**使用 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`錯誤，直到此快取重新整理為止。如果您遇到此錯誤，請等待約十分鐘讓身分集區重新整理簽署金鑰。

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