项目

tiptap 协作中的身份验证与授权

协作中的身份验证

在安装指南设置好协作编辑器后,长期使用时身份验证是必不可少的。协作提供的临时 JWT 仅适用于短暂测试。

理解 JWT

JWT,即 JSON Web Token,是一种紧凑、URL 安全的方式,用于在双方之间传递声明。JWT 中的信息通过加密算法进行数字签名,确保令牌发行后声明不会被篡改。这种数字签名使得 JWT 成为网络应用中安全信息交换的理想工具,提供了认证和信息交换的方法。

为测试创建静态 JWT

为了测试,你可能不想为生成 JWT 设置完整的后端系统。在这种情况下,可以使用在线工具,如 http://jwtbuilder.jamiekurtz.com/ 。这些工具允许你输入必要的负载并使用密钥进行签名。

在使用这些工具时,确保将“Key”字段替换为 协作设置 页面中的秘密密钥。不需要更改其他信息。

请注意,由于暴露密钥的安全风险,这种方法只推荐用于测试。

为生产环境生成 JWT

对于生产级别的应用程序,服务器端生成 JWT 是保持安全性的必要条件。在客户端代码中暴露你的密钥会危及应用程序的安全。以下是使用 NodeJS 在服务器端生成 JWT 的增强示例:

npm install jsonwebtoken
import jsonwebtoken from "jsonwebtoken";

const payload = {
  // 载荷包含标识用户及其权限的声明,例如用户ID。
  userId: "user123",
};

// 'sign'方法根据负载和你的密钥创建JWT。
const jwt = jsonwebtoken.sign(payload, "your_secret_key_here");
// 生成的JWT用于API请求的身份验证,确保安全访问。
// 重要:绝不要在客户端代码中暴露你的密钥!

这个 JWT 应包含在 API 请求中的 token 字段中,以保护用户会话和数据访问。

要将 JWT 完全集成到您的应用程序中,考虑设置专用服务器或 API 端点,如 GET /getCollabToken 。此端点将根据服务器上安全存储的秘密和用户特定信息(如文档访问权限)动态生成 JWT。

这不仅增强了安全性,还为管理协作应用中的用户会话和权限提供了一种可扩展的解决方案。

确保将密钥作为服务器上的环境变量存储,或直接在服务器代码中定义。避免从客户端发送。

有关完整服务器/API 示例,请参阅 这里

协作中的授权

设置正确的访问控制对于保持文档安全和协作流程顺畅至关重要。

这部分指南指导你如何使用 JSON Web Tokens (JWT)来精细调整谁能看到和编辑什么。无论你需要给某人完全访问权限,限制他们对某些文档的访问,还是完全阻止访问,我们都有极简的示例来满足需求。

允许对所有文档的全访问

从 JWT 负载中省略allowedDocumentNames属性会授予用户对所有文档的访问权限。这对于需要无限制访问的用户很有用。

import jsonwebtoken from "jsonwebtoken";

const data = {};

const jwt = jsonwebtoken.sign(data, "your_secret");

限制访问特定文档

要在 JWT 负载的 allowedDocumentNames 数组中包含特定文档名称,以限制用户只能访问列出的文档。这样可以确保用户只能访问指定的文档。

import jsonwebtoken from "jsonwebtoken";

const data = {
  allowedDocumentNames: [
    "user-specific-document-1",
    "user-specific-document-2",
  ],
};

const jwt = jsonwebtoken.sign(data, "your_secret");

阻止访问所有文档

要禁止用户访问任何文档,请在 JWT 负载的 allowedDocumentNames 中提供一个空数组。这将有效地阻止对所有文档的访问。

import jsonwebtoken from "jsonwebtoken";

const data = {
  allowedDocumentNames: [],
};

const jwt = jsonwebtoken.sign(data, "your_secret");

设置只读访问

JWT 设置中的 readonlyDocumentNames 属性在你需要让用户查看文档但无法编辑时起关键作用。这种功能在你需要与团队成员分享信息进行审阅或参考,但需要保持原始文档完整性的场景特别有用。

通过在 readonlyDocumentNames 数组中指定文档名称,你可以为这些文档授予用户只读访问权限。用户可以打开和阅读文档,但试图修改内容将被限制。这样可以确保敏感或关键信息保持不变,同时仍可供必要人员访问。

以下示例授予用户对 annual-report-2024policy-document-v3 这两个文档的只读访问权限。

import jsonwebtoken from "jsonwebtoken";

const data = {
  readonlyDocumentNames: ["annual-report-2024", "policy-document-v3"],
};

const jwt = jsonwebtoken.sign(data, "your_secret");

readonlyDocumentNames 属性融入 JWT 策略中,增强了文档安全性,确保只有授权的编辑才被执行,维护了关键文档的完整性。

利用通配符实现灵活的文档访问

JWT 中的通配符提供了一种动态管理文档访问的方法,允许在特定标准内赋予更广泛的权限,而无需单独列出每个文档。这种方法在文档按项目、团队或角色分组的情况下特别有用。

管理项目相关的文档

对于多个项目的团队工作,确保成员只能访问与其当前项目相关的文档至关重要。通过使用项目标识符和通配符,可以简化访问管理。

import jsonwebtoken from "jsonwebtoken";

const data = {
  allowedDocumentNames: ["project-alpha/*", "project-beta/*"],
};

const jwt = jsonwebtoken.sign(data, "your_secret");

在这个例子中,用户将可以访问所有位于 project-alphaproject-beta 下的文档,这使得随着新文档添加到这些项目时管理权限变得更加容易。

促进基于角色的访问控制

许多系统中都需要基于用户在组织内的角色进行访问控制(RBAC)。通配符使角色与文档访问模式的轻松映射变得可能。

import jsonwebtoken from "jsonwebtoken";

const data = {
  allowedDocumentNames: ["editors/*", "contributors/*"],
};

const jwt = jsonwebtoken.sign(data, "your_secret");

在这里,分配为“编辑者”或“贡献者”的用户可以访问以各自角色前缀的文档。这简化了随着角色变化或添加新角色时更新访问权限的过程。

在本文档中