Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Authenticate & Manage Users

Gestionar sesiones de usuario

App Services gestiona las sesiones de usuario con tokens de acceso y tokens de actualización. Un token de acceso permite que cualquiera que tenga el token utilice la sesión con la que está asociado durante hasta 30 minutos. Un token de actualización permite generar un nuevo token de acceso para una sesión, incluso si el token anterior ya ha expirado.

The Realm SDKs automatically manage user access and refresh tokens for you when they connect to App Services. You may want to manage sessions yourself if you're connecting to an API service like the Data API.

Puede autenticar un usuario y recibir un token de acceso de usuario directamente a través de HTTPS o mediante una sesión administrada por un SDK de Realm.

You can get an access token by sending an authentication request directly to App Services over HTTPS. The authentication endpoint accepts an HTTPS POST request with a JSON body that contains the user's login credentials. If the credentials are valid, the response contains a user access token.

1

Your App's authentication endpoint URL depends on the App's deployment model.

Seleccione el modelo de implementación de su aplicación para ver cómo construir la URL base.

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

Reemplaza <App ID> con el ID de la aplicación cliente. Por ejemplo, myapp-abcde.

https://<Region>.<Cloud>.services.cloud.mongodb.com/api/client/v2.0/app/<App ID>
  • Reemplace <Region> con la región donde está alojada su aplicación. Por ejemplo, us-east-1.

  • Reemplaza <Cloud> por la nube donde está alojada tu aplicación. Por ejemplo, aws, azure o gcp.

  • Reemplace <App ID> con el ID de su aplicación cliente. Por ejemplo, myapp-abcde.

Puede encontrar la URL base mediante programación con el punto final de ubicación de la aplicación. El cuerpo de la respuesta incluye la URL base como el 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 a un usuario, llame al punto de acceso de inicio de sesión y especifique el proveedor de autenticación. El punto de acceso de inicio de sesión es <Base URL>/auth/providers/<ProviderType>/login, donde <ProviderType> es uno de los siguientes tipos:

  • anon-user

  • local-userpass

  • api-key

  • custom-token

  • custom-function

Append the login endpoint to the base URL, and send an HTTPS POST request with a JSON body that contains the user's login credentials for the chosen provider type:

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>"
}'

Si la solicitud de autenticación se realiza correctamente, el cuerpo de la respuesta incluye los valores access_token y refresh_token del usuario. access_token es un token web JSON (JWT) que puede usar para autenticar solicitudes.

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

En los SDK de Realm, puedes acceder al token de acceso de un usuario conectado desde su objeto User. Los SDK actualizan automáticamente los tokens de acceso caducados para las operaciones del SDK, y puedes actualizarlos manualmente llamando a un método.

Para obtener más información, consulte la documentación de su SDK de Realm:

  • Realm C++ SDK

  • Realm Flutter SDK

  • Realm Java SDK

  • Realm Kotlin SDK

  • Realm .NET SDK

  • Realm Node.js SDK

  • SDK de React Native de Realm

  • Realm Swift SDK

  • Web SDK

Los tokens de acceso caducan 30 minutos después de su otorgamiento. Cuando un token de acceso caduca, debe obtener uno nuevo para continuar enviando solicitudes.

Podría obtener un nuevo token de acceso iniciando sesión nuevamente, pero esto requeriría que el usuario reingresara sus credenciales. En su lugar, puede usar el token de actualización asociado a la sesión del usuario para obtener un nuevo token de acceso válido por otros 30 minutos.

Obtienes el token de actualización en la misma respuesta que el token de acceso después de un inicio de sesión exitoso.

El punto final de actualización de sesión acepta una solicitud POST que incluye el token de actualización en el encabezado Authorization. La URL del punto final depende del modelo de implementación de la aplicación.

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"
}
  • Reemplace <Region> con la región donde está alojada su aplicación. Por ejemplo, us-east-1.

  • Reemplaza <Cloud> por la nube donde está alojada tu aplicación. Por ejemplo, aws, azure o 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"
}

Los SDK de Realm actualizan automáticamente el token de acceso de un usuario que ha iniciado sesión si el token ha expirado en el momento de una solicitud.

Los SDK también permiten actualizar manualmente el token de acceso de un usuario llamando a un método en el objeto User.

Para obtener más información, consulte la documentación de su SDK de Realm:

By default, refresh tokens expire 60 days after they are issued. You can configure the refresh token expiration interval for your App to be anywhere between 30 minutes and 5 years inclusive.

Los tokens de actualización de usuarios anónimos tienen un tiempo de expiración prolongado y, en realidad, no caducan. En cambio, las cuentas de usuarios anónimos se eliminan automáticamente 90 días después de su creación.

Puede configurar el tiempo de expiración del token de actualización para todas las sesiones en una aplicación desde la IU de administración o la API de administración.

Para establecer el tiempo de vencimiento del token de actualización para todas las sesiones en una aplicación desde la interfaz de administración:

  1. Haga clic App Users en el menú de navegación de la izquierda.

  2. Selecciona la pestaña User Settings.

  3. Busque la opción Refresh Token Expiration y haga clic en el botón Edit.

  4. Enter a time value in the text input and choose the appropriate time unit (e.g. "minutes" or "days") from the dropdown menu.

  5. Haga clic en Save.

Para establecer el tiempo de expiración del token de actualización para todas las sesiones en una aplicación desde la API de administración, llama al establecer el tiempo de expiración del token de actualización de usuario con el campo expiration_time_seconds del cuerpo de la solicitud configurado en el tiempo de expiración deseado.

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
}'

Si actualiza correctamente el tiempo de expiración del token de actualización, el punto final devuelve una respuesta 204.

Puede decodificar un token de acceso para verificar que tenga el formato correcto y una firma válida. La respuesta decodificada incluye información adicional, como la fecha de vencimiento del token de acceso.

Llama a la función Verificar de tu aplicación y decodifica un punto final de API de administración de token de acceso con el token en el token campo del cuerpo de la solicitud.

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

If the token is valid, you'll receive a 200 response.

Si el token es válido pero ha expirado, la respuesta indica que el token ha expirado en lugar de contener el JWT decodificado.

"token expired"

If the token is invalid, you'll receive a 401 response that contains an error message.

{
"error": "signature is invalid"
}

Una vez establecida una sesión, no es posible finalizarla individualmente, aunque sí se pueden revocar todas las sesiones activas de un usuario.

Puedes finalizar eficazmente una sesión de usuario borrando todas las copias del token de acceso y del token de actualización. Esto evita un mayor acceso a la sesión y requiere que el usuario se autentique e inicie una nueva sesión para continuar.

Cada SDK de Realm tiene un método User.logOut() que borra las copias locales del token de acceso y del token de actualización, y anula el token de actualización para que no pueda usarse para obtener un nuevo token de acceso.

Si se borra una cuenta de usuario, ya sea por un administrador o por el propio usuario, entonces todas las sesiones del usuario se revocan automáticamente.

Importante

Mantén los tokens seguros

Even if you delete and invalidate all copies of a token that you have, that does not end the active session on the server. If a malicious user copied the access token before it was deleted, they could use the token to make requests for up to 30 minutes until it expires. These requests would appear to come from the user who "logged out".

Puede revocar todas las sesiones actuales de un usuario. Esto invalida el acceso a la sesión y los tokens de actualización, y evita que el usuario realice cualquier solicitud en cualquier dispositivo hasta que vuelva a iniciar sesión.

Si se borra una cuenta de usuario, ya sea por parte de un administrador o del propio usuario, todas las sesiones del usuario se revocan automáticamente.

  1. Seleccione App Users en el menú de navegación de la izquierda.

  2. En la pestaña Users, busque un usuario en la lista y haga clic en el ícono de puntos suspensivos (...).

  3. Haga clic en Revoke all sessions.

To revoke all sessions for a user, call appservices users revoke. The CLI will prompt you for your App ID and list users in that app for you to select.

appservices users revoke

You can also specify the arguments when you run the command:

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

Tip

Puedes revocar sesiones para varios usuarios con un solo comando especificando sus valores de id en una lista separada por comas.

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

Llamar al punto final Revocar sesiones de usuario.

Asegúrese de reemplazar los siguientes valores en la URL del punto final:

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

Volver

Administrar cuentas de usuario