Поделиться через


Контракт токена Azure Fluid Relay

Запросы, отправленные в Ретранслятор Azure Fluid Relay, должны содержать JWT в заголовке авторизации. Этот маркер должен быть подписан ключом клиента.

Претензии

JWTs (веб-токены JSON) разделены на три части:

  • Заголовок . Предоставляет сведения о том, как проверить маркер, включая сведения о типе токена и о том, как он был подписан.
  • Полезные данные — содержит все важные данные о пользователе или приложении, пытающемся вызвать службу.
  • Подпись содержит исходный материал для проверки маркера.

Каждая часть разделена точкой (.) и отдельно закодирована Base64.

Утверждения заголовка

Требование Формат Описание
ALG струна Алгоритм, используемый для подписи маркера. Например, "HS256"
Тип струна Это значение всегда должно быть "JWT".

Утверждения полезных данных

Требование Формат Описание
documentId струна Создано службой Azure Fluid Relay (AFR). Определяет документ, для которого создается маркер.
охват строка[] Определяет разрешения, необходимые клиенту в документе или сводке. Для каждой области можно определить разрешения, которые нужно предоставить клиенту.
идентификатор арендатора струна Определяет клиент.
Пользователь JSON (JavaScript Object Notation) Определяет пользователей приложения. Его можно использовать приложением для идентификации пользователей с помощью аудитории Fluid Framework.
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
иат число, метка времени UNIX Значение Issued At (Выпущено в) показывает, когда произошла проверка подлинности этого маркера.
эксп число, метка времени UNIX Утверждение "exp" (срок действия) определяет время окончания срока действия или после чего JWT не должен приниматься для обработки. Время существования токена не может превышать 1 час.
вер струна Обозначает номер версии маркера доступа. Должно быть 1.0 .
JTI струна Необязательно. Утверждение jti (идентификатор маркера JWT) предоставляет уникальный идентификатор JWT. Значение идентификатора должно быть назначено таким образом, чтобы гарантировать, что существует незначимая вероятность того, что одно и то же значение будет случайно назначено другому объекту данных. Мы рекомендуем использовать это утверждение, чтобы избежать сбоев из-за использования одного маркера для создания документов.

Пример маркера Ретранслятора Жидкости Azure

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

Пакет npm jsonwebtoken можно использовать и подписать маркер с помощью этого метода.

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>");
    }