Contrato de token do Azure Fluid Relay

As solicitações enviadas ao Azure Fluid Relay devem conter um token JWT no cabeçalho de autorização. Esse token deve ser assinado pela chave do locatário.

Pedidos

JWTs (JSON Web Tokens) são divididos em três partes:

  • Cabeçalho - Fornece informações sobre como validar o token, incluindo informações sobre o tipo de token e como ele foi assinado.
  • Carga útil - Contém todos os dados importantes sobre o usuário ou aplicativo que está tentando chamar seu serviço.
  • Assinatura - É a matéria-prima utilizada para validar o token.

Cada parte é separada por um ponto (.) e codificada separadamente Base64.

Declarações de cabeçalho

Afirmação Formato Descrição
ALG string O algoritmo usado para assinar o token. Por exemplo, "HS256"
tipagem string Este valor deve ser sempre "JWT".

Declarações de carga útil

Afirmação Formato Descrição
ID do documento string Gerado pelo serviço Azure Fluid Relay (AFR). Identifica o documento para o qual o token está sendo gerado.
âmbito string[] Identifica as permissões exigidas pelo cliente no documento ou resumo. Para cada escopo, você pode definir as permissões que deseja dar ao cliente.
tenantId string Identifica o locatário.
Utilizador JSON Identifica os usuários do seu aplicativo. Ele pode ser usado pelo seu aplicativo para identificar seus usuários usando o Fluid Framework Audience.
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
IAT número, um carimbo de data/hora UNIX "Emitido em" indica quando ocorreu a autenticação para este token.
exp número, um carimbo de data/hora UNIX A reivindicação "exp" (tempo de expiração) identifica o tempo de expiração no qual ou após o qual o JWT não deve ser aceito para processamento. A vida útil do token não pode ser superior a 1 hora.
ver string Indica a versão do token de acesso. Deve ser 1.0 .
JTI string Opcional. A declaração "jti" (JWT ID) fornece um identificador exclusivo para o JWT. O valor do identificador DEVE ser atribuído de forma a garantir que existe uma probabilidade negligenciável de que o mesmo valor seja atribuído acidentalmente a um objeto de dados diferente. Recomendamos que você use essa declaração para evitar falhas devido ao uso do mesmo token para a criação de documentos.

Um exemplo de token do 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] 

Como você pode gerar um token do Azure Fluid Relay?

Você pode usar o pacote npm jsonwebtoken e assinar seu token usando esse método.

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