

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

# 使用 Amazon Cognito 身分來源
<a name="identity-sources-cognito"></a>

Verified Permissions 與 Amazon Cognito 使用者集區緊密搭配運作。 Amazon Cognito JWTs具有可預測的結構。Verified Permissions 會辨識此結構，並從其中包含的資訊中獲益上限。例如，您可以使用 ID 字符或存取權杖實作角色型存取控制 (RBAC) 授權模型。

新的 Amazon Cognito 使用者集區身分來源需要以下資訊：
+  AWS 區域。
+ 使用者集區 ID。
+ 您要與身分來源建立關聯的主體實體類型，例如 `MyCorp::User`。
+ 您要與身分來源建立關聯的委託人群組實體類型，例如 `MyCorp::UserGroup`。
+ 使用者集區的用戶端 IDs，您想要授權 向您的政策存放區提出請求。

由於 Verified Permissions 僅適用於相同 中的 Amazon Cognito 使用者集區 AWS 帳戶，因此您無法在另一個帳戶中指定身分來源。Verified Permissions 會將*實體字首* - 您必須在對使用者集區主體採取行動的政策中參考的身分來源識別符 - 設定為使用者集區的 ID，例如 `us-west-2_EXAMPLE`。在此情況下，您會參考該使用者集區中 ID `a1b2c3d4-5678-90ab-cdef-EXAMPLE22222`為 的使用者 `us-west-2_EXAMPLE|a1b2c3d4-5678-90ab-cdef-EXAMPLE22222`

使用者集區字符*宣告*可以包含屬性、範圍、群組、用戶端 IDs和自訂資料。[Amazon Cognito JWTs](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)能夠包含各種資訊，有助於在 Verified Permissions 中做出授權決策。其中包含：

1. 具有`cognito:`字首的使用者名稱和群組宣告

1. 使用 [自訂使用者屬性](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes) `custom: prefix`

1. 在執行時間新增的自訂宣告

1. OIDC 標準宣告，例如 `sub`和 `email`

我們會詳細說明這些宣告，以及如何在 的 Verified Permissions 政策中管理這些宣告[將 Amazon Cognito 字符映射至結構描述](cognito-map-token-to-schema.md)。

**重要**  
雖然您可以在權 Amazon Cognito 杖過期之前撤銷權杖，但 JWTs被視為具有簽章和有效性的獨立無狀態資源。符合 [JSON Web 權杖 RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519) 的服務預期會從遠端驗證權杖，而且不需要向發行者驗證權杖。這表示 Verified Permissions 可以根據稍後刪除的使用者撤銷或發出的字符授予存取權。若要降低此風險，建議您以最短的有效期間建立權杖，並在想要移除繼續使用者工作階段的授權時撤銷重新整理權杖。如需詳細資訊，請參閱[使用字符撤銷結束使用者工作階段](https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html)

以下範例示範如何建立參考與委託人相關聯之部分 Amazon Cognito 使用者集區宣告的政策。

```
permit(
     principal, 
     action, 
     resource == ExampleCo::Photo::"VacationPhoto94.jpg" 
)
when { 
     principal["cognito:username"]) == "alice" &&
     principal["custom:department"]) == "Finance"
};
```

以下範例示範如何建立政策，以參考 Cognito 使用者集區中的使用者委託人。請注意，主體 ID 採用 的形式`"<userpool-id>|<sub>"`。

```
permit(
     principal == ExampleCo::User::"us-east-1_example|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", 
     action, 
     resource == ExampleCo::Photo::"VacationPhoto94.jpg" 
);
```

Verified Permissions 中使用者集區身分來源的 Cedar 政策針對包含英數字元和底線 () 以外的字元的宣告名稱使用特殊語法`_`。這包括包含`:`字元的使用者集區字首宣告，例如 `cognito:username`和 `custom:department`。若要撰寫參考 `cognito:username`或 `custom:department`宣告的政策條件`principal["custom:department"]`，請分別將其寫入為 `principal["cognito:username"]`和 。

**注意**  
如果字符包含具有 `cognito:`或 `custom:`字首的宣告，以及具有常值 `cognito`或 的宣告名稱`custom`，則具有 [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html) 的授權請求會失敗，並顯示 `ValidationException`。

如需映射宣告的詳細資訊，請參閱 [將 Amazon Cognito 字符映射至結構描述](cognito-map-token-to-schema.md)。如需 Amazon Cognito 使用者授權的詳細資訊，請參閱《[Amazon Cognito 開發人員指南》中的使用 Amazon 驗證許可授權](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-authorization-with-avp.html)。 *Amazon Cognito *

**Topics**
+ [建立 Amazon Verified Permissions Amazon Cognito 身分來源](cognito-create.md)
+ [編輯 Amazon Verified Permissions Amazon Cognito 身分來源](cognito-edit.md)
+ [將 Amazon Cognito 字符映射至結構描述](cognito-map-token-to-schema.md)
+ [的用戶端和對象驗證 Amazon Cognito](cognito-validation.md)