你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Fluid Relay 令牌协定

发送到 Azure Fluid Relay 的请求应在授权标头中包含 JWT 令牌。 此令牌应由租户密钥签名

声明

JWT(JSON Web 令牌)分为三部分:

  • 标头 - 提供有关如何验证令牌的信息,包括有关令牌的类型及其签名方式的信息。
  • 有效负载 - 包含有关正在尝试调用你的服务的用户或应用的所有重要数据。
  • 签名 - 用于验证令牌的原始材料。

每个部分由句点 (.) 分隔,并分别采用 Base64 编码。

标头声明

声明 格式 说明
alg string 用于签署令牌的算法。 例如,“HS256”
typ string 此值应始终为“JWT”。

有效负载声明

声明 格式 说明
documentId string 由 Azure Fluid Relay (AFR) 服务生成。 标识要为其生成令牌的文档。
scope string[] 标识客户端对文档或摘要所需的权限。 对于每个范围,可以定义要授予客户端的权限。
tenantId string 标识租户。
user JSON 标识应用程序的用户。 应用程序可以使用它通过 Fluid Framework 受众来标识用户。
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
iat 数字,UNIX 时间戳 “Issued At”表示针对此令牌进行身份验证的时间。
exp 数字,UNIX 时间戳 “exp”(过期时间)声明指定哪个时间或之后不能接受 JWT 以进行处理。 令牌生存期不能超过 1 小时。
ver string 指示访问令牌的版本。 必须为 1.0
jti string 可选。 “jti”(JWT ID) 声明为 JWT 提供唯一标识符。 标识符值的赋值方式必须确保几乎不会将相同的值意外分配给不同的数据对象。 建议你使用此声明,以避免创建文档时因使用相同的令牌而失败。

Azure Fluid Relay 令牌示例

{ 
  "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] 

如何生成 Azure Fluid Relay 令牌?

你可以使用 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>");
    }