Página inicial do Docs → Serviços Atlas App
Autenticação JWT personalizada
Nesta página
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.
Autenticação e autorização
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.
Como funciona a autenticação JWT
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.
A autenticação JWT com o App Services segue estas etapas gerais:
O usuário faz logon no fornecedor de autenticação terceirizado por qualquer meio exigido pelo fornecedor.
Se a autenticação for bem-sucedida, o provedor retorna um JWT para o aplicativo cliente.
O aplicativo cliente faz login no App Services através da credencial JWT.
O App Services analisa e decodifica o JWT.
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.
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.
O provedor decodifica e verifica a assinatura e retorna um JWK.
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.
Configuração
Você configura a autenticação JWT personalizada a partir da UI ou com a CLI. Escolha seu método preferido abaixo.
Método de verificação
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.
Especificar Chaves de Assinatura Manualmente
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:
| |
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:
ObservaçãoSe 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.
Usar um URI JWK
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étodoRS256
necessário.
Campos de metadados
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 Regras de valor padrão
|
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" ] }, } ] }
Público
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.
Usando a autenticação JWT
Você pode registrar novos usuários de JWT personalizados e fazer login usando um dos Realm SDKs ou um serviço de API.
Realm SDKs
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:
Serviços de API
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.