Docs Menu
Docs Home
/ /
Autenticar y administrar usuarios

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.

Los SDK de Realm gestionan automáticamente el acceso de los usuarios y los tokens de actualización cuando se conectan a App Services. Si se conecta a un servicio API como la API de datos, puede que desee gestionar las sesiones usted mismo.

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.

Puedes obtener un token de acceso enviando una solicitud de autenticación directamente a App Services mediante HTTPS. El punto de conexión de autenticación acepta una solicitud POST HTTPS con un cuerpo JSON que contiene las credenciales de inicio de sesión del usuario. Si las credenciales son válidas, la respuesta contiene un token de acceso de usuario.

1

La URL del punto final de autenticación de su aplicación depende del modelo de implementación de la aplicación.

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>
  • Reemplaza <Region> por la región donde está alojada tu 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

Agregue el punto final de inicio de sesión a la URL base y envíe una solicitud POST HTTPS con un cuerpo JSON que contenga las credenciales de inicio de sesión del usuario para el tipo de proveedor elegido:

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:

  • SDK de Realm C++

  • SDK de Flutter de Realm

  • SDK de Java de Realm

  • Realm Kotlin SDK

  • Realm .NET SDK

  • SDK de Node.js de Realm

  • SDK de React Native de Realm

  • SDK de Realm Swift

  • 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 de nuevo la sesión del usuario, pero esto requeriría que el usuario reintrodujera 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 30 minutos más.

Obtendrás 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"
}
  • Reemplaza <Region> por la región donde está alojada tu 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 le 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:

De forma predeterminada, los tokens de actualización caducan 60 días después de su emisión. Puedes configurar el intervalo de caducidad del token de actualización para tu aplicación entre 30 minutos y 5 años, ambos inclusive.

Los tokens de actualización de usuarios anónimos tienen un tiempo de expiración largo 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. Seleccione la pestaña User Settings.

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

  4. Introduzca un valor de tiempo en la entrada de texto y elija la unidad de tiempo adecuada (por ejemplo, "minutos" o "días") en el menú desplegable.

  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, llame al punto final Establecer tiempo de expiración del token de actualización del usuario de su aplicación con el expiration_time_seconds campo del cuerpo de la solicitud establecido 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"
}

Si el token es válido, recibirás una respuesta 200.

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"

Si el token no es válido, recibirá una respuesta 401 que contiene un mensaje de error.

{
"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.

Puede finalizar una sesión de usuario eliminando todas las copias del token de acceso y del token de actualización. Esto impide que se vuelva a acceder 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 elimina copias locales del token de acceso y del token de actualización e invalida el token de actualización para que no pueda usarse para obtener un nuevo token de acceso.

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

Importante

Mantenga los tokens seguros

Incluso si elimina e invalida todas las copias de un token, esto no finaliza la sesión activa en el servidor. Si un usuario malintencionado copió el token de acceso antes de que se eliminara, podría usarlo para realizar solicitudes durante un máximo de 30 minutos, hasta que caduque. Estas solicitudes parecerían provenir del usuario que cerró sesión.

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 elimina una cuenta de usuario, ya sea por un administrador o por el 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.

Para revocar todas las sesiones de un usuario, llame a appservices users revoke. La CLI le solicitará el ID de su aplicación y le mostrará una lista de usuarios de esa aplicación para que los seleccione.

appservices users revoke

También puedes especificar los argumentos cuando ejecutas el comando:

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

Tip

Puede revocar sesiones para varios usuarios con un solo comando especificando sus valores id como 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