# 设置 AWS Cognito

{% hint style="warning" %}
本指南将带你完成为文档设置受保护的登录界面。在阅读本指南之前，请确保你已经先完成了 [启用经过身份验证的访问](https://gitbook-v2-5hpihs24d-gitbook.vercel.app/url/gitbook.com/docs/documentation/zh/zhan-dian-fang-wen/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 中你想要的 User Pool，然后点击 App integration。记下 Cognito 域名，我们后续配置集成时会用到它。

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

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

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

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

点击已创建的应用客户端，并记下 Client ID 和 Client Secret。

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

在 GitBook 应用中进入集成，选择“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>

在你的站点上安装完成后，进入配置，并记下 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 token 中包含自定义声明。

这通常通过创建一个 [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，使你的站点能够根据已验证用户的个人资料动态调整其内容。
