Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/

Gerenciar sessões de usuário

Nesta página

  • Visão geral
  • Obter um token de acesso à sessão de usuário
  • Obter um token de acesso de usuário por HTTPS
  • Obter um token de acesso do usuário a partir de um SDK do Realm
  • Atualizar um token de acesso à sessão do usuário
  • Atualizar um token de acesso do usuário por HTTPS
  • Atualizar um token de acesso do usuário a partir de um Realm SDK
  • Configurar expiração do token de atualização
  • Definir a expiração do token de atualização na interface do administrador
  • Definir a expiração do token de atualização por HTTPS
  • Verificar e decodificar um token de acesso do usuário
  • Encerrar uma sessão de usuário
  • Revogar as sessões de um usuário

O App Services gerencia sessões de usuário com tokens de acesso e tokens de atualização. Um token de acesso permite que qualquer pessoa que tenha o token use a sessão com a qual está associada por até 30 minutos. Um token de atualização permite gerar um novo token de acesso para uma sessão, mesmo que o token anterior já tenha expirado.

Os SDKs do Realm gerenciam automaticamente o acesso do usuário e atualizam os tokens para você quando se conectam ao App Services. Talvez você mesmo queira gerenciar sessões se estiver se conectando a um serviço de API, como o Data API.

Você pode autenticar um usuário e receber um token de acesso do usuário diretamente por HTTPS ou por uma sessão gerenciada por um SDK do Realm.

Você pode obter um token de acesso enviando uma solicitação de autenticação diretamente para o App Services por HTTPS. O ponto de extremidade de autenticação aceita uma solicitação POST HTTPS com um corpo JSON que contém as credenciais de login do usuário. Se as credenciais forem válidas, a resposta conterá um token de acesso do usuário.

1

O URL de endpoint de autenticação do seu aplicativo depende do modelo de sistema do aplicativo.

Selecione o modelo de sistema do seu aplicativo para ver como construir o URL base.

https://services.cloud.mongodb.com/api/client/v2.0/app/<App ID>

Substitua <App ID> pelo ID do aplicativo cliente . Por exemplo, myapp-abcde.

https://<Region>.<Cloud>.services.cloud.mongodb.com/api/client/v2.0/app/<App ID>
  • Substitua <Region> pela região em que seu aplicativo está hospedado. Por exemplo, us-east-1.

  • Substitua <Cloud> pela nuvem onde seu aplicativo está hospedado. Por exemplo, aws, azure ou gcp.

  • Substitua <App ID> pelo ID do aplicativo cliente. Por exemplo, myapp-abcde.

Você pode encontrar o URL base programaticamente com o endpoint de localização do aplicativo. O corpo de resposta inclui o URL base como o campo hostname.

curl 'https://services.cloud.mongodb.com/api/client/v2.0/app/<App ID>/location'
{
"deployment_model": "LOCAL",
"location": "US-VA",
"hostname": "https://us-east-1.aws.services.cloud.mongodb.com",
"ws_hostname": "wss://ws.us-east-1.aws.services.cloud.mongodb.com"
}
2

Para autenticar um usuário, ligue para o endpoint de login, especificando o provedor de autenticação. O ponto de extremidade de logon é <Base URL>/auth/providers/<ProviderType>/login, onde <ProviderType> é um dos seguintes tipos:

  • anon-user

  • local-userpass

  • api-key

  • custom-token

  • custom-function

Anexe o endpoint de login ao URL base e envie uma solicitação HTTPS POST com um corpo JSON que contém as credenciais de login do usuário para o tipo de fornecedor escolhido:

curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/myapp-abcde/auth/providers/anon-user/login'
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/myapp-abcde/auth/providers/local-userpass/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "test@example.com",
"password": "Pa55w0rd"
}'
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/myapp-abcde/auth/providers/api-key/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"key": "hScMWZyOKnjQMbfDPMJ1qHgtdGT2raQXdVDDvlC2SzKEBKlHKV8FK9SPCSTnODPg"
}'
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/myapp-abcde/auth/providers/custom-token/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0ZXN0ZGV2LWJwcWVsIiwiZXhwIjoxNTE2MjM5MDIyLCJzdWIiOiIyNDYwMSIsInVzZXJfZGF0YSI6eyJuYW1lIjoiSmVhbiBWYWxqZWFuIiwiYWxpYXNlcyI6WyJNb25zaWV1ciBNYWRlbGVpbmUiLCJVbHRpbWUgRmF1Y2hlbGV2ZW50IiwiVXJiYWluIEZhYnJlIl19fQ.mVWr4yFf8nD1EhuhrJbgKfY7BEpMab38RflXzUxuaEI"
}'
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/myapp-abcde/auth/providers/custom-function/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"someCustomFunctionArg": "<Login Info>"
}'

Se a solicitação de autenticação for bem-sucedida, o corpo da resposta incluirá os valores access_token e refresh_token para o usuário. O access_token é um JSON Web Token (JWT) que você pode usar para autenticar solicitações.

{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJiYWFzX2RldmljZV9pZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImJhYXNfZG9tYWluX2lkIjoiNWVlYTg2NjdiY2I0YzgxMGI2NTFmYjU5IiwiZXhwIjoxNjY3OTQwNjE4LCJpYXQiOjE2Njc5Mzg4MTgsImlzcyI6IjYzNmFiYTAyMTcyOGI2YzFjMDNkYjgzZSIsInN0aXRjaF9kZXZJZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInN0aXRjaF9kb21haW5JZCI6IjVlZWE4NjY3YmNiNGM4MTBiNjUxZmI1OSIsInN1YiI6IjYzNmFiYTAyMTcyOGI2YzFjMDNkYjdmOSIsInR5cCI6ImFjY2VzcyJ9.pyq3nfzFUT-6r-umqGrEVIP8XHOw0WGnTZ3-EbvgbF0",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJiYWFzX2RhdGEiOm51bGwsImJhYXNfZGV2aWNlX2lkIjoiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiYmFhc19kb21haW5faWQiOiI1ZWVhODY2N2JjYjRjODEwYjY1MWZiNTkiLCJiYWFzX2lkIjoiNjM2YWJhMDIxNzI4YjZjMWMwM2RiODNlIiwiYmFhc19pZGVudGl0eSI6eyJpZCI6IjYzNmFiYTAyMTcyOGI2YzFjMDNkYjdmOC1ud2hzd2F6ZHljbXZycGVuZHdkZHRjZHQiLCJwcm92aWRlcl90eXBlIjoiYW5vbi11c2VyIiwicHJvdmlkZXJfaWQiOiI2MjRkZTdiYjhlYzZjOTM5NjI2ZjU0MjUifSwiZXhwIjozMjQ0NzM4ODE4LCJpYXQiOjE2Njc5Mzg4MTgsInN0aXRjaF9kYXRhIjpudWxsLCJzdGl0Y2hfZGV2SWQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJzdGl0Y2hfZG9tYWluSWQiOiI1ZWVhODY2N2JjYjRjODEwYjY1MWZiNTkiLCJzdGl0Y2hfaWQiOiI2MzZhYmEwMjE3MjhiNmMxYzAzZGI4M2UiLCJzdGl0Y2hfaWRlbnQiOnsiaWQiOiI2MzZhYmEwMjE3MjhiNmMxYzAzZGI3Zjgtbndoc3dhemR5Y212cnBlbmR3ZGR0Y2R0IiwicHJvdmlkZXJfdHlwZSI6ImFub24tdXNlciIsInByb3ZpZGVyX2lkIjoiNjI0ZGU3YmI4ZWM2YzkzOTYyNmY1NDI1In0sInN1YiI6IjYzNmFiYTAyMTcyOGI2YzFjMDNkYjdmOSIsInR5cCI6InJlZnJlc2gifQ.h9YskmSpSLK8DMwBpPGuk7g1s4OWZDifZ1fmOJgSygw",
"user_id": "636aba021728b6c1c03db7f9"
}

Nos SDKs do Realm, você pode acessar um token de acesso de usuário conectado a partir de seu objeto User. Os SDKs atualizam automaticamente tokens de acesso expirados para operações de SDK e você pode atualizá-los manualmente ligando para um método.

Para saber mais, consulte a documentação do SDK do Realm:

  • SDK do Realm C++

  • Realm Flutter SDK

  • Realm Java SDK

  • Realm Kotlin SDK

  • Realm .NET SDK

  • Realm Node.js SDK

  • Realm React Native SDK

  • Realm Swift SDK

  • Web SDK

Os tokens de acesso expiram 30 minutos após serem concedidos. Quando um token de acesso expira, você deve obter um novo token de acesso para continuar enviando solicitações.

Você poderia adquirir um novo token de acesso fazendo o login do usuário novamente, mas isso exigiria que o usuário digitasse novamente suas credenciais. Em vez disso, você pode usar o token de atualização associado à sessão do usuário para obter um novo token de acesso válido por mais 30 minutos.

Você obtém o token de atualização na mesma resposta que o token de acesso após um login bem-sucedido.

O endpoint de atualização da sessão aceita uma solicitação do POST que inclui o token de atualização no cabeçalho do Authorization. O URL do endpoint depende do modelo de sistema do seu aplicativo.

curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/auth/session' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <RefreshToken>'
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJiYWFzX2RldmljZV9pZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImJhYXNfZG9tYWluX2lkIjoiNWVlYTg2NjdiY2I0YzgxMGI2NTFmYjU5IiwiZXhwIjoxNjY3OTQzOTc5LCJpYXQiOjE2Njc5NDIxNzksImlzcyI6IjYzNmFjNzAyMDE5ZDJkYmY0NzUxMDRjMiIsInN0aXRjaF9kZXZJZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInN0aXRjaF9kb21haW5JZCI6IjVlZWE4NjY3YmNiNGM4MTBiNjUxZmI1OSIsInN1YiI6IjYzNmFjNzAyMDE5ZDJkYmY0NzUxMDQ5MyIsInR5cCI6ImFjY2VzcyJ9.pF3DR-096Ujt9-0KOWJTU25ZuryvwMfeCI7TiHJERNg"
}
  • Substitua <Region> pela região em que seu aplicativo está hospedado. Por exemplo, us-east-1.

  • Substitua <Cloud> pela nuvem onde seu aplicativo está hospedado. Por exemplo, aws, azure ou gcp.

curl -X POST 'https://<Region>.<Cloud>.services.cloud.mongodb.com/api/client/v2.0/auth/session' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <RefreshToken>'
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJiYWFzX2RldmljZV9pZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImJhYXNfZG9tYWluX2lkIjoiNWVlYTg2NjdiY2I0YzgxMGI2NTFmYjU5IiwiZXhwIjoxNjY3OTQzOTc5LCJpYXQiOjE2Njc5NDIxNzksImlzcyI6IjYzNmFjNzAyMDE5ZDJkYmY0NzUxMDRjMiIsInN0aXRjaF9kZXZJZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInN0aXRjaF9kb21haW5JZCI6IjVlZWE4NjY3YmNiNGM4MTBiNjUxZmI1OSIsInN1YiI6IjYzNmFjNzAyMDE5ZDJkYmY0NzUxMDQ5MyIsInR5cCI6ImFjY2VzcyJ9.pF3DR-096Ujt9-0KOWJTU25ZuryvwMfeCI7TiHJERNg"
}

Realm SDKs atualizam automaticamente o token de acesso de um usuário conectado se o token tiver expirado no momento de uma solicitação.

SDKs também permitem atualizar manualmente o token de acesso de um usuário ao chamar um método no objeto User.

Para saber mais, consulte a documentação do SDK do Realm:

Por padrão, tokens de atualização expiram 60 dias após serem emitidos. Você pode configurar o intervalo de expiração do token de atualização do seu aplicativo para algo entre 30 minutos e 5 anos, inclusivo.

Os tokens anônimos de atualização do usuário têm um tempo de expiração longo e, efetivamente, não expiram. Em vez disso, as contas de usuário anônimas são automaticamente excluídas 90 dias após serem criadas.

Você pode configurar o tempo de expiração do token de atualização para todas as sessões em um aplicativo a partir da interface do usuário do administrador ou da API do administrador.

Para definir o tempo de expiração do token de atualização para todas as sessões em um aplicativo a partir da UI do administrador:

  1. Clique em App Users no menu de navegação esquerdo.

  2. Selecione a guia User Settings.

  3. Encontre a opção Refresh Token Expiration e clique no botão Edit.

  4. Insira um valor de tempo na entrada de texto e escolha a unidade de tempo apropriada (p. ex., "minutos" ou "dias") no menu suspenso.

  5. Clique em Save.

Para definir o tempo de expiração do token de atualização para todas as sessões em um aplicativo a partir da API de administração, chame o ponto de extremidade Set User Refresh Token Expiration Time (Definir tempo de expiração do token de atualização do usuário) do seu aplicativo com o campo expiration_time_seconds do corpo da solicitação definido como o tempo de expiração desejado.

curl -X PUT \
https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/security/refresh_token_expiration \
--data-raw '{
"expiration_time_seconds": 864000
}'

Se você atualizar com êxito o prazo de expiração do token de atualização, o endpoint retornará uma resposta 204.

Você pode decodificar um token de acesso para verificar se ele tem o formato correto e tem uma assinatura válida. A resposta descodificada inclui outras informações, como quando o token de acesso expira.

Chame o ponto final da API de administrador do Verificar e decodificar um token de acesso do aplicativo com o token no campo token do corpo da solicitação.

curl -X POST \
https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/users/verify_token \
--data-raw '{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJiYWFzX2RldmljZV9pZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsImJhYXNfZG9tYWluX2lkIjoiNWNkYjEyNDA4ZTIzMmFjNGY5NTg3ZmU4IiwiZXhwIjoxNjc2NTExMjgyLCJpYXQiOjE2NzY1MDk0ODIsImlzcyI6IjYzZWQ4MTJhNDNiZTcyYzE3NmFhNWQyMyIsInN0aXRjaF9kZXZJZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsInN0aXRjaF9kb21haW5JZCI6IjVjZGIxMjQwOGUyMzJhYzRmOTU4N2ZlOCIsInN1YiI6IjYzZWQ4MTJhNDNiZTcyYzE3NmFhNWQyMSIsInR5cCI6ImFjY2VzcyJ9.7kHO9wjWvIaD3VewDyPhLyb-oRc7wTYZdD9-hroF-H4"
}'
{
"sub": "63ed812a43be72c176aa5d21",
"exp": 1676511282,
"iat": 1676509482,
"iss": "63ed812a43be72c176aa5d23",
"domain_id": "5cdb12408e232ac4f9587fe8",
"device_id": "000000000000000000000000"
}

Se o token for válido, você receberá uma resposta de 200.

Se o token for válido, mas expirado, a resposta indicará que o token expirou em vez de conter o JWT decodificado.

"token expired"

Se o token for inválido, você receberá uma resposta de 401 que contém uma mensagem de erro.

{
"error": "signature is invalid"
}

Depois de estabelecer uma sessão, você não poderá encerrá-la individualmente, mas poderá revogar todas as sessões ativas de um usuário.

É possível encerrar efetivamente uma sessão de usuário excluindo todas as cópias do token de acesso e do token de atualização. Isso impede o acesso posterior à sessão e exige que o usuário se autentique e inicie uma nova sessão para poder continuar.

Cada SDK do Realm tem um método User.logOut() que exclui as cópias locais do token de acesso e o token de atualização e invalida o token de atualização para que ele não possa ser usado para obter um novo token de acesso.

Se uma conta de usuário for excluída, por um administrador ou pelo usuário, todas as sessões do usuário serão automaticamente revogadas.

Importante

Mantenha os tokens seguros

Mesmo que você exclua e invalide todas as cópias de um token que você tem, isso não encerra a sessão ativa no servidor. Se um usuário mal-intencionado copiasse o token de acesso antes de ser excluído, ele poderia usar o token para fazer solicitações por até 30 minutos até que ele expire. Essas solicitações parecem vir do usuário que "desconectou".

Você pode revogar todas as sessões atuais de um usuário. Isso invalida o acesso à sessão e os tokens de atualização e impede que o usuário faça qualquer solicitação em qualquer dispositivo até que ele faça login novamente.

Se uma conta de usuário for excluída por um administrador ou pelo usuário, todas as sessões do usuário serão automaticamente revogadas.

  1. Selecione App Users no menu de navegação esquerdo.

  2. Na aba Users, localize um usuário na lista e clique nas reticências (...).

  3. Clique em Revoke all sessions.

Para revogar todas as sessões de um usuário, ligue para appservices users revoke. A CLI solicitará seu ID do aplicativo e listará os usuários desse aplicativo para você selecionar.

appservices users revoke

Você também pode especificar os argumentos ao executar o comando:

appservices users revoke \
--app=<Your App ID> \
--user=<User ID>

Dica

Você pode revogar sessões para vários usuários com um único comando especificando seus valores de id como uma lista separada por vírgula.

appservices users revoke --user=6099694d5debcbcc873ff413,60996996b78eca4a8d615d3a

Ligue para o endpoint Revogar sessões de usuário .

Certifique-se de substituir os seguintes valores no URL do endpoint:

curl -X PUT \
-H 'Authorization: Bearer {access_token}' \
https://services.cloud.mongodb.com/api/admin/v3.0/groups/{groupId}/apps/{appId}/users/{userId}/logout

Voltar

Gerenciar contas de usuário