跳转到主要内容
Pro 方案 包含密码认证。Custom 方案 包含所有认证方式。
启用认证后,用户需先登录才能访问你的文档。 启用认证后,用户必须先登录才能访问任何内容。你可以将特定页面或分组配置为公开,而将其他页面设为受保护状态。

配置认证

选择要配置的握手方式。
密码认证仅提供访问控制,支持内容个性化。

前提条件

  • 你的安全策略允许在多个用户之间共享密码。

设置

1

创建密码。

  1. 在控制台中,前往 Authentication
  2. 启用认证。
  3. Password Protection 部分输入一个安全的密码。
输入密码后,你的网站会重新部署。部署完成后,任何访问你站点的用户都必须输入该密码才能访问你的内容。
2

分发访问权限。

以安全方式将密码和文档 URL 分享给获授权的用户。

示例

你将文档托管在 docs.foo.com,只需要基础访问控制,而不需要跟踪单个用户。你希望阻止公众访问,同时保持设置简单。在控制台中创建一个强密码,并将凭证分享给获授权的用户。就这么简单!

公开页面

在使用认证时,所有页面默认都需要通过认证才能访问。你可以在页面或分组级别通过 public 属性将特定页面设置为无需认证即可访问。

单个页面

要将页面设为公开,请在该页面的 frontmatter 中添加 public: true
Public page example
---
title: "公开页面"
public: true
---

页面分组

要将某个分组中的所有页面设为公开,请在 docs.jsonnavigation 对象中,该分组名称下添加 "public": true
Public group example
{
  "navigation": {
    "groups": [
      {
        "group": "公开组",
        "public": true,
        "icon": "play",
        "pages": [
          "quickstart",
          "installation",
          "settings"
        ]
      },
      {
        "group": "私有组",
        "icon": "pause",
        "pages": [
          "private-information",
          "secret-settings"
        ]
      }
    ]
  }
}

使用 groups 控制访问

当你使用 OAuth 或 JWT(JSON Web Token)进行认证时,可以将特定页面仅限于某些用户组访问。若希望不同用户根据其角色或属性查看不同内容,这将非常有用。 通过在认证过程中传递的用户数据来管理 groups。详见 用户数据格式
Example user info
{
  "groups": ["admin", "beta-users"],
  "expiresAt": 1735689600
}
使用 frontmatter 中的 groups 属性来指定哪些 groups 可以访问特定页面。
Example page restricted to the admin group
---
title: "管理员控制台"
groups: ["admin"]
---
用户必须至少属于所列的一个 groups 才能访问该页面。如果用户在不具备所需分组的情况下尝试访问页面,将会收到 404 错误。

groups 如何与公共页面配合使用

  • 默认情况下,所有页面都需要认证。
  • 具有 groups 属性的页面仅对属于这些 groups 的已认证用户可访问。
  • 没有 groups 属性的页面对所有已认证用户可访问。
  • 具有 public: true 且没有 groups 属性的页面对所有人可访问。
---
title: "Public guide"
public: true
---

用户数据格式

当使用 OAuth 或 JWT 认证时,系统会返回用户数据,用于控制会话时长以及基于用户组成员关系的访问控制。
type User = {
  expiresAt?: number;
  groups?: string[];
};
expiresAt
number
会话过期时间,以自 epoch 起算的秒数表示。当当前时间超过该值时,用户必须重新完成认证。
对于 JWT: 这不同于 JWT 的 exp 声明,后者用于决定 JWT 何时被视为无效。出于安全考虑,应将 JWT 的 exp 声明设置为较短的时长(10 秒或更少)。使用 expiresAt 来表示实际会话时长(从数小时到数周)。
groups
string[]
用户所属用户组的列表。frontmatter 中带有匹配 groups 的页面对该用户可访问。示例:具有 groups: ["admin", "engineering"] 的用户可以访问带有 adminengineering 用户组标记的页面。