与协作进行认证

Collaboration

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

这是一个快速设置。有关完整参考,请参见 身份验证在协作中进行身份验证和授权

签署令牌

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

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` 字段中。永远不要将你的私钥暴露给前端。

有关其他语言的示例,请参见签署令牌;有关短期令牌和撤销,请参见处理令牌过期

限制访问特定文档

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

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 模型,请参阅 旧版身份验证