

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自定义属性多租户最佳实践
<a name="custom-attribute-based-multi-tenancy"></a>

Amazon Cognito 支持使用自选名称的[自定义属性](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title)。自定义属性在一种情况下很有用，那就是当它们用于区分共享用户池中用户的租赁时。当您为用户分配一个像 `custom:tenantID` 这样的属性值时，您的应用程序可以相应地对租户特定的资源分配访问权限。定义租户 ID 的自定义属性对应用程序客户端来说应该是不可变或只读的。

下图显示租户共享应用程序客户端和用户池，用户池中的自定义属性指明他们所属的租户。

![\[many-to-one多租户模型示意图，其中每个用户在共享用户池中都有自己的租户用户属性。\]](http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/images/multi-tenancy-custom-attribute.png)


当自定义属性确定租赁时，您可以分发单个应用程序或登录 URL。用户登录后，应用程序可以处理 `custom:tenantID` 声明，确定要加载哪些资产、要应用的品牌以及要显示的特征。要根据用户属性作出高级访问控制决策，请在 Amazon Verified Permissions 中将用户池设置为身份提供者，然后根据 ID 令牌或访问令牌的内容生成访问决策。

**何时实施自定义属性多租户**  
当租赁是表面层级时。租户属性有助于实现品牌和布局结果。当您想在租户之间实现显著隔离时，自定义属性并不是最佳选择。如果租户之间有任何差异必须在用户池或应用程序客户端级别进行配置（例如 MFA 或托管 UI 品牌），则您需要以自定义属性无法实现的方式在租户级别进行区分。借助身份池，您甚至可以根据用户在其 ID 令牌中的自定义属性声明，为用户选择相应的 IAM 角色。

**工作量水平**  
由于自定义属性多租户将基于租户的授权决策职责转移到应用程序上，因此工作量往往很高。如果您已经精通用于解析 OIDC 声明的客户端配置或熟练使用 Amazon Verified Permissions，那么这种方法所需的工作量可能更少。