Azure Fluid Relay 權杖合約

傳送至 Azure Fluid Relay 的要求應該在授權標頭中包含 JWT 權杖。 此權杖應該 由租使用者金鑰 簽署。

宣告

JWT (JSON Web Token) 分成三個部分:

  • 標頭 - 提供有關如何驗證權杖的資訊,包括權杖類型及其簽署方式的相關資訊。
  • Payload - 包含嘗試呼叫服務之使用者或應用程式的所有重要資料。
  • 簽章 - 這是用來驗證權杖的原材料。

每個部分會以句號 (.) 分隔,並以 Base64 編碼分隔。

標頭宣告

索賠 格式 描述
alg string 用來簽署權杖的演算法。 例如,「HS256」
typ string 此值應該一律為 「JWT」。

承載宣告

索賠 格式 描述
documentId string 由 Azure Fluid Relay (AFR) 服務產生。 識別產生權杖的檔。
範圍 (scope) string[] 識別用戶端在檔或摘要上所需的許可權。 針對每個範圍,您可以定義您想要提供給用戶端的許可權。
tenantId string 識別租使用者。
使用者 JSON 識別應用程式的使用者。 應用程式可以使用它來識別使用者,方法是使用 流體架構物件
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
iat number, a UNIX timestamp 「已發出 At」表示何時發生此權杖的驗證。
exp number, a UNIX timestamp 「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>");
    }