发送到 Azure Fluid Relay 的请求应包含授权标头中的 JWT。 此令牌应由 租户密钥签名。
JWT(JSON Web 令牌)分为三个部分:
- 标头 - 提供有关如何验证令牌的信息,包括有关令牌类型及其签名方式的信息。
- 有效负载 - 包含有关尝试调用服务的用户或应用的所有重要数据。
- 签名 - 用于验证令牌的原始材料。
每个部分由句点(.)分隔,并单独进行 Base64 编码。
索赔 | 格式 | DESCRIPTION |
---|---|---|
ALG | 字符串 | 用于对令牌进行签名的算法。 例如,“HS256” |
typ | 字符串 | 此值应始终为“JWT”。 |
索赔 | 格式 | DESCRIPTION |
---|---|---|
documentId 文件 ID | 字符串 | 由 Azure Fluid Relay (AFR) 服务生成。 标识要为其生成令牌的文档。 |
范围 | 字符串[] | 标识客户端对文档或摘要所需的权限。 对于每个范围,可以定义要提供给客户端的权限。 |
租户ID | 字符串 | 标识租户。 |
用户 | JSON(JavaScript 对象表示法) | 标识应用程序的用户。 应用程序可以使用它通过 Fluid Framework Audience 标识用户。{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, } |
iat | number,一个 UNIX 时间戳 | “Issued At”表示针对此令牌进行身份验证的时间。 |
exp | number,一个 UNIX 时间戳 | “exp”(过期时间)声明标识 JWT 不能接受其处理时间或之后的到期时间。 令牌生存期不能超过 1 小时。 |
ver | 字符串 | 指示访问令牌的版本。 必须是 1.0 。 |
jti | 字符串 | 可选。 “jti”(JWT ID) 声明为 JWT 提供唯一标识符。 必须以某种方式分配标识符值,以确保将意外将相同的值意外分配给其他数据对象的可能性微乎其微。 我们鼓励你使用此声明来避免由于使用同一令牌创建文档而失败。 |
{
"alg": "HS256",
"typ": "JWT"
}.{
"documentId": "746c4a6f-f778-4970-83cd-9e21bf88326c",
"scopes": [ "doc:read", "doc:write", "summary:write" ],
"iat": 1599098963,
"exp": 1599098963,
"tenantId": "AzureFluidTenantId",
"ver": "1.0",
"jti": "d7cd6602-2179-11ec-9621-0242ac130002"
}.[Signature]
可以使用 jsonwebtoken npm 包并使用此方法对令牌进行签名。
export function getSignedToken(
tenantId: string,
documentId: string,
tokenLifetime: number = 60 * 60,
ver: string = "1.0") {
jwt.sign(
{
documentId,
user: {
displayName: "displayName",
id: "userId",
name: "userName"
},
scopes: ["doc:read", "doc:write", "summary:write"],
iat: Math.round((new Date()).getTime() / 1000),
exp: Math.round((new Date()).getTime() / 1000) + tokenLifetime, //set the expiry date based on your needs but max-limit is one hour.
tenantId,
ver,
jti: uuid(),
},
"<tenant_key>");
}