次の方法で共有


Azure Fluid Relay トークン コントラクト

Azure Fluid Relay に送信される要求には、承認ヘッダーに JWT が含まれている必要があります。 このトークンは 、テナント キーによって署名されている必要があります。

請求

JWT (JSON Web トークン) は、次の 3 つの部分に分割されます。

  • ヘッダー - トークンの種類と署名方法に関する情報など、トークンを検証する方法に関する情報を提供します。
  • ペイロード - サービスを呼び出そうとしているユーザーまたはアプリに関するすべての重要なデータが含まれます。
  • 署名 - トークンの検証に使用される原材料です。

各部分はピリオド (.) で区切られ、Base64 で個別にエンコードされます。

ヘッダーのクレーム

主張 フォーマット 説明
アルグ ひも トークンの署名に使用されるアルゴリズム。 たとえば、"HS256"
タイプ型 ひも この値は常に "JWT" にする必要があります。

ペイロードのクレーム

主張 フォーマット 説明
ドキュメントID ひも Azure Fluid Relay (AFR) サービスによって生成されます。 トークンが生成されるドキュメントを識別します。
範囲 文字列[] ドキュメントまたは概要でクライアントが必要とするアクセス許可を識別します。 スコープごとに、クライアントに付与するアクセス許可を定義できます。
テナントID ひも テナントを識別します。
ユーザー JSON(ジェイソン) アプリケーションのユーザーを識別します。 これは、アプリケーションが Fluid Framework Audience を使用してユーザーを識別するために使用できます。
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
イアット 数値、UNIX タイムスタンプ "Issued At" は、このトークンの認証がいつ行われたのかを示します。
経験値 数値、UNIX タイムスタンプ "exp" (有効期限) 要求は、JWT の処理を受け入れてはならない有効期限を示します。 トークンの有効期間は 1 時間を超えることはできません。
バージョン ひも アクセス トークンのバージョンを示します。 1.0する必要があります。
JTIの ひも 任意。 "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>");
    }