Contrato de token do Azure Fluid Relay

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

Declarações

Os JWTs (Token Web JSON) 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.
  • Conteúdo – contém todos os dados importantes sobre o usuário ou o aplicativo que está tentando chamar o serviço.
  • Assinatura – é a matéria-prima usada para validar o token.

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

Declarações de cabeçalho

Declaração Formatar Descrição
alg string O algoritmo usado para assinar o token. Por exemplo, "HS256"
typ string Esse valor deve ser sempre "JWT".

Declarações de conteúdo

Declaração Formatar Descrição
documentId string Gerado pelo serviço AFR (Azure Fluid Relay). Identifica o documento para o qual o token está sendo gerado.
scope 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.
usuário JSON Identifica os usuários do seu aplicativo. Ele pode ser usado pelo seu aplicativo para identificar seus usuários usando o Público do Fluid Framework.
{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, }
iat number, um carimbo de data/hora UNIX "Emitido em" indica quando ocorreu a autenticação desse token.
exp number, um carimbo de data/hora UNIX A declaração "exp" (hora de expiração) identifica a hora de expiração ou a hora após ela na qual o JWT não deve ser aceito para processamento. O tempo de vida do token não pode ser maior que 1 hora.
ver string Indica a versão do token de acesso. Deve ser 1.0.
jti string Opcional. a declaração "jti" (ID do JWT) fornece um identificador exclusivo para o JWT. O valor do identificador DEVE ser atribuído de uma forma que garanta que haja uma probabilidade insignificante de que o mesmo valor seja acidentalmente atribuído a outro objeto de dados. Incentivamos você a usar essa declaração para evitar falhas devido ao uso do mesmo token para a criação de documentos.

Um token do Azure Fluid Relay de exemplo

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