与协作进行认证
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 模型,请参阅 旧版身份验证。