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


Токен-контракт Azure Fluid Relay

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

Претензии

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

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

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

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

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

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

Утверждение Формат Description
documentId строка Создано службой Azure Fluid Relay (AFR). Определяет документ, для которого создается маркер.
область string[] Определяет разрешения, необходимые клиенту в документе или сводке. Для каждого область можно определить разрешения, которые необходимо предоставить клиенту.
tenantId строка Определяет клиент.
Пользователь JSON Определяет пользователей приложения. Его можно использовать приложением для идентификации пользователей с помощью аудитории Fluid Framework.
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
iat число, метка времени UNIX Значение Issued At (Выпущено в) показывает, когда произошла проверка подлинности этого маркера.
exp число, метка времени UNIX Утверждение exp (время окончания срока действия) указывает время окончания срока действия или время, начиная с которого маркер JWT не должен приниматься в обработку. Время существования токена не может превышать 1 час.
ver строка Обозначает номер версии маркера доступа. Должно быть 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>");
    }