---
title: "与协作进行认证"
description: "使用统一的 Tiptap 身份验证模型在服务器端生成和管理协作令牌。"
canonical_url: "https://tiptap.zhcndoc.com/guides/authentication"
---

# 与协作进行认证

使用统一的 Tiptap 身份验证模型在服务器端生成和管理协作令牌。

你的应用程序会在服务器上使用你环境的私钥签署自己的令牌，而该私钥永远不会离开你的服务器。

这是一个快速设置。有关完整参考，请参见 [身份验证](https://tiptap.zhcndoc.com/authentication.md) 和 [在协作中进行身份验证和授权](https://tiptap.zhcndoc.com/collaboration/getting-started/authenticate.md)。

## 签署令牌

使用你环境的私钥在服务器上签署令牌，该私钥绝不能离开你的服务器。协作令牌会设置 `aud: "Documents"`，并携带 `permissions`，说明用户可以访问哪些文档。

```typescript
import { SignJWT, importPKCS8 } from 'jose'

const privateKey = await importPKCS8(process.env.TIPTAP_PRIVATE_KEY, 'ES256')

const jwt = await new SignJWT({
  permissions: [{ action: 'Documents:Write', resource: '*' }],
})
  .setProtectedHeader({ alg: 'ES256' })
  .setIssuer(process.env.TIPTAP_ENVIRONMENT_ID)
  .setSubject('user-identifier')
  .setAudience(['Documents'])
  .setExpirationTime('30m')
  .sign(privateKey)
// 将此令牌发送到提供程序的 `token` 字段中。永远不要将你的私钥暴露给前端。
```

有关其他语言的示例，请参见[签署令牌](https://tiptap.zhcndoc.com/authentication.md#signing-the-token)；有关短期令牌和撤销，请参见[处理令牌过期](https://tiptap.zhcndoc.com/collaboration/getting-started/authenticate.md#handle-token-expiry)。

## 限制访问特定文档

要将令牌限定到特定文档，请将权限的 `resource` 设置为文档名称，或使用 `prefix` 约束来匹配一个组：

```typescript
const jwt = await new SignJWT({
  permissions: [
    {
      action: 'Documents:Write',
      resource: '*',
      constraints: { prefix: '1500c624-8f9f-496a-b196-5e5dd8ec3c25/' },
    },
  ],
})
  .setProtectedHeader({ alg: 'ES256' })
  .setIssuer(process.env.TIPTAP_ENVIRONMENT_ID)
  .setAudience(['Documents'])
  .setExpirationTime('30m')
  .sign(privateKey)
```

这会授予对该用户前缀下每个文档的访问权限。对于之前的 `allowedDocumentNames` 模型，请参阅 [旧版身份验证](https://tiptap.zhcndoc.com/authentication/legacy.md)。
