# 设置 AWS Cognito

{% hint style="warning" %}
本指南将带你完成为你的文档设置受保护的登录界面的过程。在继续本指南之前，请确保你已经先完成了 [启用经过身份验证的访问](https://gitbook-open-v2-preview.gitbook.workers.dev/url/gitbook.com/docs/documentation/zh/publishing-documentation/authenticated-access/enabling-authenticated-access).
{% endhint %}

要使用 AWS Cognito 为您的 GitBook 站点设置带身份验证的访问，流程如下：

{% stepper %}
{% step %}
**创建一个新的 AWS Cognito 应用**

从您的 AWS 控制台创建一个 AWS Cognito 应用。
{% endstep %}

{% step %}
**安装并配置 AWS Cognito 集成**

安装 AWS Cognito 集成并添加所需配置。
{% endstep %}

{% step %}
**为自适应内容配置 AWS Cognito（可选）**

配置 AWS Cognito 以与 GitBook 中的自适应内容配合使用。
{% endstep %}
{% endstepper %}

### 创建一个新的 AWS Cognito 应用

进入 Cognito 中您想要的用户池，然后点击 App integration。记下 Cognito 域名，我们需要它来配置该集成。

滚动到最底部并点击“Create app client”。对于应用类型，选择“Confidential client”。继续向下滚动到 Hosted UI settings。在 allowed Callback URLs 中，输入您在空间中安装该集成后从 GitBook 获取到的 Callback URL。

继续向下滚动到“OAuth 2.0 grant types”——确保已选中“Authorization code grant”。

对于“OpenID connect scopes”，确保已选择 OpenID。

向下滚动并点击“Create app client”。

点击已创建的 app client，并记下 Client ID 和 Client Secret。

### 安装并配置 AWS Cognito 集成

在 GitBook 应用中进入 integrations，选择 authenticated access 作为类别，并安装 AWS Cognito 集成。

<figure><img src="https://2111890564-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNkEGS7hzeqa35sMXQZ4X%2Fuploads%2FCZy21M4LIPwMVSxI3ec1%2FScreen%20Shot%202024-12-13%20at%203.37.39%20PM.png?alt=media&#x26;token=4e31d496-04eb-4d00-ac45-011b543edfe4" alt="A GitBook screenshot showing the AWS Cognito integration install screen"><figcaption></figcaption></figure>

在您的站点上安装完成后，前往 configuration，并记下 Save 按钮上方的 Callback URL。我们需要它来设置 Cognito。

打开您安装该集成的空间的 Cognito 集成配置界面。

它应该如下图所示：

<figure><img src="https://2111890564-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNkEGS7hzeqa35sMXQZ4X%2Fuploads%2Fgy177CzFZiy6U4IntLUE%2FScreen%20Shot%202024-12-13%20at%203.41.57%20PM.png?alt=media&#x26;token=3823d5cb-56e0-4e02-abd6-6d6d66cacf71" alt="A GitBook screenshot showing the AWS Cognito configuration screen"><figcaption></figcaption></figure>

对于 Client ID、Cognito Domain 和 Client Secret，请粘贴您从 Cognito 获取的值。

点击 Save。

现在，在 GitBook 中关闭集成模态窗口，然后点击 Manage site 按钮。导航到 **受众**，选择 **已认证访问**，然后选择 Cognito 作为后端。接着，点击 **更新受众**。进入网站的屏幕并点击 **发布**。\
\
现在，该站点已发布在受身份验证保护的访问之后，并由您的 Auth0 应用控制。要试用它，请点击 Visit。系统会要求您使用 Cognito 登录，这表明您的站点已通过 Auth0 发布在受身份验证保护的访问之后。

### 为自适应内容配置 AWS Cognito（可选）

要在 GitBook 的身份验证访问中利用自适应内容，您需要配置 Amazon Cognito 用户池，使其在 ID 令牌中包含自定义声明。

这通常通过创建一个 [Cognito Lambda 触发器](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token-generation.html)——具体来说是一个 *Pre Token Generation* Lambda——来完成，它会返回一个 JSON 载荷，用于覆盖或追加自定义声明。这些声明可能包括用户角色、订阅等级，或与您的内容相关的任何其他元数据。

下面是一个可能的示例：

```javascript
export const handler = async (event, context) => {
  // 从事件请求中检索用户属性
  const userAttributes = event.request.userAttributes;

  // 向事件响应添加额外声明
  event.response = {
    "claimsAndScopeOverrideDetails": {
      "idTokenGeneration": {},
      "accessTokenGeneration": {
        "claimsToAddOrOverride": {
          "products": ['api', 'sites', 'askAI'],
          "isBetaUser": true,
          "isAlphaUser": true,
        }
      }
    }
  };
  // 返回到 Amazon Cognito
  context.done(null, event);
};
```

<figure><img src="https://2111890564-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNkEGS7hzeqa35sMXQZ4X%2Fuploads%2FwwKLiRUOJ27tjJCPc1Vd%2FScreenshot%202025-06-30%20at%2017.31.23.png?alt=media&#x26;token=f015ad33-1e96-47d4-82a5-e3b259f55a0e" alt=""><figcaption></figcaption></figure>

添加后，这些键值对会包含在身份验证令牌中并传递给 GitBook，使您的站点能够根据已认证用户的个人资料动态调整其内容。
