Menu Docs

Página inicial do DocsServiços Atlas App

Autenticação JWT personalizada

Nesta página

  • Autenticação e autorização
  • Como funciona a autenticação JWT
  • Configuração
  • Método de verificação
  • Especificar Chaves de Assinatura Manualmente
  • Usar um URI JWK
  • Campos de metadados
  • Público
  • Usando a autenticação JWT
  • Realm SDKs
  • Serviços de API

O fornecedor de autenticação JWT personalizado permite que os usuários se conectem com uma credencial de autenticação de um sistema de terceiros (externo ao Atlas App Services) e usem esse token para acessar dados e serviços com o App Services. O sistema externo deve retornar um JSON Web Token (JWT) assinado que contém um valor de ID exclusivo para o usuário autenticado.

O provedor de JWT de terceiros autentica usuários e retorna um JWT. O App Services utiliza o JWT para identificar os usuários do seu aplicativo e autorizar suas solicitações.

O App Services é independente dos métodos de autenticação utilizados pelo fornecedor terceirizado. Não impõe quaisquer restrições aos requisitos ou métodos de autenticação do sistema de autenticação externo. Por exemplo, o sistema pode exigir que o usuário execute autenticação multifator (MFA), forneça credenciais específicas ou identifique-se de outra forma.

Existem muitos recursos online que mergulham nos meandros da autenticação de JWT e da estrutura do token. No contexto do App Services, o diagrama a seguir fornece o fluxo do processo de um usuário que faz login em uma aplicação Device Sync. As etapas abaixo do diagrama fornecem detalhes.

Esquema da Arquitetura de Autenticação Personalizada do JWT.
clique para ampliar

A autenticação JWT com o App Services segue estas etapas gerais:

  1. O usuário faz logon no fornecedor de autenticação terceirizado por qualquer meio exigido pelo fornecedor.

  2. Se a autenticação for bem-sucedida, o provedor retorna um JWT para o aplicativo cliente.

  3. O aplicativo cliente faz login no App Services através da credencial JWT.

  4. O App Services analisa e decodifica o JWT.

  5. Se você colocou manualmente as chaves de assinatura no App Services, ele verifica se a chave de assinatura no JWT corresponde a uma das chaves que você especificou. Caso corresponda, o usuário é autenticado.

  6. Se você configurou o App Services para usar um URI de chave da Web JSON (JWK), o App Services passa o JWT e a chave pública para a API JWK do fornecedor terceirizado.

    1. O provedor decodifica e verifica a assinatura e retorna um JWK.

    2. O App Services verifica se a assinatura no JWK corresponde à assinatura do JWT. Em caso afirmativo, o usuário é autenticado.

Importante

O token de acesso sempre expira após 30 minutos

O App Services sempre especifica uma expiração de minutos para o token de acesso, mesmo que o token JWT personalizado especifique uma expiração diferente por meio da chaveexp. O App Services verificará o exp do token JWT personalizado para garantir que o token ainda seja válido antes de emitir a expiração de 30 minutos. Para obter mais informações sobre tokens de acesso aos App Services, consulte Gerenciar Sessões de Usuário.

Você configura a autenticação JWT personalizada a partir da UI ou com a CLI. Escolha seu método preferido abaixo.

O campo Verification Method determina como os Serviços de aplicativos validarão o JWT retornado do provedor de JWT. Você pode configurar o App Services para validar o JWT usando a(s) chave(s) de assinatura fornecidas ou para validar usando um URI de chave da Web JSON (JWK) enviado pelo fornecedor terceirizado.

Você pode configurar sua aplicação para usar uma ou mais chaves de assinatura para validar o JWT. Existem duas configurações que você precisa fornecer:

Campo
Descrição
Signing Algorithm
config.signingAlgorithm

O método criptográfico que o sistema externo usa para assinar o JWT. A autenticação personalizada suporta JWTs assinados usando um dos seguintes algoritmos:

  • HS256

  • RS256

Signing Key
secret_config.signingKeys

Uma lista de até três Segredos que cada um contém uma chave de assinatura utilizada pelo sistema de autenticação de terceiros para assinar JWTs. A chave só pode conter letras, números, sublinhados e hífens ASCII e deve ter entre 32 e 512 caracteres. A seguir está uma chave de assinatura válida de 256 bits:

231a58b00632c9c4d8ac02b268ca4caf8dd48fd020e3dffa72666523d860988f

Observação

Se não tiver certeza do valor a ser usado, considere visitar um site gerador de chaves aleatórias, como keygen.io e usando um dos 256valores bits gerados.

Aviso

Um Signing Key é uma chave secreta e qualquer pessoa com a chave pode emitir credenciais de usuário válidas para sua aplicação. Certifique-se de que ela nunca seja armazenada em uma localização acessível ao público, como um repositório git, um quadro de mensagens ou em seu código.

Alguns sistemas de autenticação externa fornecem um conjunto de chaves da Web JSON (JWKS) que descreve o algoritmo de assinatura e as chaves de assinatura que o sistema usa para assinar JWTs. Você pode usar o JWKS para configurar o provedor em vez de especificar manualmente o algoritmo e as chaves de assinatura. O JWKS retornado deve incluir um kid cabeçalho que especifique o ID da chave de uma chave do JWKS. O JWKS pode especificar até três chaves de assinatura e deve usar o RS256 algoritmo .

Observação

No Atlas App Services, JWK e JWKS são como sinônimos.

Há apenas um valor que você precisa fornecer:

  • JWK URI, que é a URL de terceiros que hospeda um serviço JWK ou JWKS. Ao escolher esta opção, o App Service define automaticamente a codificação para o método RS256 necessário.

Metadata Fields são dados adicionais que descrevem cada usuário interno do App Services. O App Services determina o valor de cada campo de metadados a partir do valor de um campo incluído no JWT de terceiros. Por exemplo, se você definir o campo name de um usuário, o App Services utilizará esse campo no JWT como o nome de exibição do usuário.

Observação

App Services atualizam os metadados de um usuário sempre que ele faz logon e expõe os campos no objeto data dos metadados do usuário.

Importante

Limites de caracteres do campo JWT e metadados

O tamanho de um token JWT aumenta com o número de campos de metadados no token e o tamanho de cada campo. O App Services limita o comprimento de um token JWT a 1 milhões de caracteres, e o comprimento de cada campo de metadados a 4096 caracteres. Se você exceder esses limites, o App Services registra um erro e o ticket não é processado.

Há três valores que você precisa especificar para cada campo de metadados:

Campo
Descrição
Required
necessário
No caso de true , o campo de metadados é obrigatório para todos os usuários associados ao fornecedor. O JWT retornado pelo sistema externo deve ter um valor atribuído ao campo designado pelo Path.
Path
name
O nome ou caminho para um campo no JWT que contém o valor para o campo de metadados. Para especificar o caminho para um campo em um objeto embarcado, use a notação de ponto.
Field Name
field_name

Opcional. Um nome para o campo de metadados no documento data do objeto de usuário que mapeia para o Caminho JWT. Este nome de campo deve ter menos de 64 caracteres.

Regras de valor padrão

  • Se este campo não for especificado, o nome padrão é o nome do campo JWT que contém o valor.

  • Se este campo não for especificado e o valor do caminho utilizar notação de ponto, o nome padrão será a última parte da notação. Por exemplo, se você especificar um caminho de location.primary.city, o valor padrão para o nome será city.

Exemplo

Um sistema de autenticação externo retorna JWTs que incluem informação adicional sobre cada usuário no campo user_data:

(JWT JSON)
{
"aud": "myapp-abcde",
"exp": 1516239022,
"sub": "24601",
"user_data": {
"name": "Jean Valjean",
"aliases": [
"Monsieur Madeleine",
"Ultime Fauchelevent",
"Urbain Fabre"
]
}
}

Para incluir os valores do campo user_data no objeto de usuário de cada usuário, especifique os seguintes campos de metadados em sua configuração do App Services:

Caminho
Nome do campo
user_data.name
name
user_data.aliases
aliases

O objeto do usuário agora incluirá esses campos:

(USER METADATA OBJECT)
{
"id": "59fdd02846244cdse5369ebf",
"type": "normal",
"data": {
"name": "Jean Valjean",
"aliases": [
"Monsieur Madeleine",
"Ultime Fauchelevent",
"Urbain Fabre"
]
},
identities: [
{
"id": "24601",
"provider_type": "custom-token",
"data": {
"name": "Jean Valjean",
"aliases": [
"Monsieur Madeleine",
"Ultime Fauchelevent",
"Urbain Fabre"
]
},
}
]
}

O Audience de um JWT especifica o destinatário pretendido do token. Os JWTs descrevem seu público na reivindicação de aud. O App Services espera que aud contenha o ID da aplicação para o qual o fornecedor está configurado. No entanto, se o JWT do sistema de autenticação externo especificar um valor aud diferente, você poderá configurar o fornecedor para usar esse valor.

Você pode registrar novos usuários de JWT personalizados e fazer login usando um dos Realm SDKs ou um serviço de API.

Para obter exemplos de código que demonstram como se registrar e se conectar usando a autenticação JWT personalizada, consulte a documentação do Realm SDK para seu idioma e plataforma preferidos:

Você pode autenticar solicitações de API de dados usando o fornecedor JWT personalizado. Você pode exigir que os usuários criem contas antes de usar um serviço ou configurar seus pontos de conexão de API para criar automaticamente uma nova conta de usuário se a solicitação contiver um JWT válido que não corresponda a um usuário existente. Existem duas abordagens para usar JWTs com suas APIs de serviço:

  • especifique o JWT diretamente no cabeçalho de solicitação jwtTokenString

  • inicie uma sessão do usuário com o JWT e inclua o token de acesso da sessão como um token portador no cabeçalho Authorization.

Para obter mais informações, consulte Autenticar solicitações de API de dados.

← Autenticação de função personalizada