El proveedor de autenticación JWT personalizado permite a los usuarios iniciar sesión con una credencial de autenticación de un sistema externo (externo a Atlas App Services) y usar ese token para acceder a datos y servicios con App Services. El sistema externo debe devolver un token firmado. Token web JSON (JWT) que contiene un valor de identificación único para el usuario autenticado.
Autenticación y autorización
El proveedor de JWT externo autentica a los usuarios y devuelve un JWT. App Services utiliza el JWT para identificar a los usuarios de la aplicación y autorizar sus solicitudes.
App Services es independiente de los métodos de autenticación utilizados por el proveedor externo. No impone ninguna restricción a los requisitos ni a los métodos de autenticación del sistema de autenticación externo. Por ejemplo, el sistema podría requerir que el usuario realice una autenticación multifactor (MFA), proporcione credenciales específicas o se identifique de alguna otra manera.
Cómo funciona la autenticación JWT
Existen numerosos recursos en línea que profundizan en las complejidades de la autenticación JWT y la estructura del token. En el contexto de App Services, el siguiente diagrama muestra el flujo del proceso de un usuario que inicia sesión en una aplicación Device Sync. Los pasos debajo del diagrama proporcionan detalles.

La autenticación JWT con App Services sigue estos pasos generales:
El usuario inicia sesión en el proveedor de autenticación de terceros mediante el medio que requiera el proveedor.
Si la autenticación tiene éxito, el proveedor devuelve un JWT a la aplicación cliente.
La aplicación cliente inicia sesión en la App Services app, proporcionando la credencial JWT.
App Services analiza y decodifica el JWT.
Si proporcionó manualmente claves de firma en App Services, este servicio comprueba si la clave de firma del JWT coincide con una de las claves de firma especificadas. De ser así, el usuario se autentica.
Si configuró App Services para usar una URI de clave web JSON (JWK), App Services pasa el JWT y la clave pública a la API JWK del proveedor externo.
El proveedor decodifica y verifica la firma y devuelve un JWK.
App Services comprueba si la firma del JWK coincide con la del JWT. De ser así, el usuario se autentica.
Importante
El token de acceso siempre caduca después de 30 minutos
App Services siempre especifica un vencimiento del token de acceso de 30minutos, incluso si el token JWT personalizado especifica un vencimiento diferente a través de exp Clave. App Services comprobará el token JWT personalizado exp para garantizar su validez antes de emitir la 30expiración de minutos. Para obtener más información sobre los tokens de acceso de App Services, consulte Administrar sesiones de usuario.
Configuración
La autenticación JWT personalizada se configura desde la interfaz de usuario o con la CLI. Elija su método preferido a continuación.
Puede habilitar el proveedor de autenticación JWT desde la interfaz de usuario de App Services seleccionando Custom JWT Authentication desde la página Authentication.
Para habilitar y configurar el proveedor de autenticación JWT personalizado con la CLI de App Services, defina un objeto de configuración para él /auth/providers.json en.
Una configuración personalizada del proveedor JWT tiene la siguiente forma:
{ "custom-token": { "name": "custom-token", "type": "custom-token", "config": { "audience": "<JWT Audience>", "requireAnyAudience": <boolean>, "signingAlgorithm": "<JWT Signing Algorithm>", "useJWKURI": <boolean>, "jwkURI": "<JWK or JWKS URL>", }, "secret_config": { "signingKeys": [ "<Signing Key Secret Name>", ... ] }, "metadata_fields": [ { "required": <boolean>, "name": "<JWT Field Path>", "field_name": "<Metadata Field Name>", }, ... ], "disabled": <boolean> } }
Método de verificación
El campo Verification Method determina cómo App Services validará el JWT devuelto por el proveedor de JWT. Puede configurar App Services para que valide el JWT mediante las claves de firma que proporcione o mediante una URI de clave web JSON (JWK) emitida por el proveedor externo.
Especifica manualmente las claves de firma
Puedes configurar tu aplicación para usar una o más claves de firma para validar el JWT. Debes proporcionar dos configuraciones:
Campo | Descripción | |
|---|---|---|
Signing Algorithm config.signingAlgorithm | El método criptográfico que utiliza el sistema externo para firmar el JWT. La autenticación personalizada admite JWT firmados con cualquiera de los siguientes algoritmos:
| |
Signing Key secret_config.signingKeys | Una lista de hasta tres secretos que contienen cada uno una clave de firma utilizada por el sistema de autenticación de terceros para firmar JWT. La clave solo puede contener letras ASCII, números, guiones bajos y guiones, y debe tener entre 32 y 512 caracteres. La siguiente es una 256clave de firma válida de bits: |
Establece el algoritmo de firma:
![Las entradas de configuración de claves de firma]()
Cree una o más claves de firma para firmar el JWT. Para ello, proporcione un nombre para la clave (este solo se usará como referencia posterior) y, a continuación, especifique una clave de firma de 256bits.
![Las entradas de configuración de claves de firma]()
"config": { "signingAlgorithm": "<JWT Signing Algorithm>", }, "secret_config": { "signingKeys": [ "<Signing Key Secret Name>", ... ] }
Advertencia
Signing Key es una clave secreta y cualquiera que la posea puede emitir credenciales de usuario válidas para tu aplicación. Asegúrate de que nunca se almacene en una ubicación de acceso público, como un repositorio de Git, un foro de mensajes o en tu código.
Utilice una URI JWK
Algunos sistemas de autenticación externa proporcionan un conjunto de kid claves web JSON (JWKS) que describe el RS256 algoritmo y las claves de firma que el sistema utiliza para firmar JWT. Puede usar el JWKS para configurar el proveedor en lugar de especificar manualmente el algoritmo y las claves de firma. El JWKS devuelto debe incluir un encabezado que especifique el ID de clave de una clave del JWKS. El JWKS puede especificar hasta tres claves de firma y debe usar el algoritmo.
Nota
JWK y JWKS se utilizan como sinónimos en Atlas App Services.
Solo hay un valor que debes proporcionar:
JWK URI, que es la URL de terceros que aloja un servicio JWK o JWKS. Al elegir esta opción, App Service configura automáticamente el cifrado con el métodoRS256requerido.
Especifique la URL del punto final JWKS de terceros:

"config": { "useJWKURI": <boolean>, "jwkURI": "<JWK or JWKS URL>" }
Campos de metadatos
Metadata Fields Son datos adicionales que describen a cada usuario interno de App Services. App Services determina el valor de cada campo de metadatos a partir del valor de un campo incluido en el JWT de terceros. Por ejemplo, si se configura el campo name de un usuario, App Services usará ese campo en el JWT como su nombre para mostrar.
Nota
App Services actualiza los metadatos de un usuario cada vez que inicia sesión y expone los campos en el data objeto de los metadatos del usuario.
Importante
Límites de caracteres en campos JWT y metadatos
La longitud de un token JWT aumenta con la cantidad de campos de metadatos que contiene y el tamaño de cada campo. App Services limita la longitud de un token JWT a 1 millones de caracteres y la longitud de cada campo de metadatos a 4096 caracteres. Si se exceden estos límites, App Services registra un error y el ticket no se procesa.
Hay tres valores que debes especificar para cada campo de metadatos:
Campo | Descripción |
|---|---|
Required required | Si |
Path name | El nombre o la ruta de un campo en el JWT que contiene el valor del campo de metadatos. Para especificar la ruta de un campo en un objeto incrustado, utilice la notación de punto. Si el nombre del campo en el JWT contiene un punto |
Field Name field_name | Opcional. Un nombre para el campo de metadatos en el documento del objeto de usuario Reglas de valores predeterminados
|
Para definir un campo de metadatos, haz clic en Add Field y especifica la asignación entre el campo de metadatos en el JWT y su nombre de campo correspondiente en el objeto de usuario.

Para definir un campo de metadatos en un archivo de configuración de autenticación JWT personalizada, agregue una entrada para el campo a la matriz metadata_fields. Cada entrada debe ser un documento con el siguiente formato:
{ required: <boolean>, name: "<field path>", field_name: "<metadata field name>" }
Utilice una barra invertida (\) para escapar los caracteres de punto (.) en las claves JWT.
Por ejemplo, en este objeto JSON, representa el "nested_key" en el nombre de ruta como valid\.json\.key\.nested_key.
{ "valid.json.key": { "nested_key": "val" } }
Ejemplo
Un sistema de autenticación externa devuelve JWT que incluyen información adicional sobre cada usuario en el 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 los valores del campo en el user_data objeto de usuario de cada usuario, especifique los siguientes campos de metadatos en su configuración de App Services:
Ruta de acceso | Nombre de campo |
|---|---|
|
|
|
|
El objeto de usuario ahora incluirá esos 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" ] }, } ] }
Audiencia
El Audience de un JWT especifica el destinatario del token. Los JWT describen su audiencia en la notificación aud. App Services espera que aud contenga el ID de la aplicación para la que está configurado el proveedor. Sin embargo, si el JWT del sistema de autenticación externo especifica un valor aud diferente, puede configurar el proveedor para que use ese valor.
Hay dos campos que puedes configurar:
Campo | Descripción |
|---|---|
| Un valor único o una lista de valores separados por comas para la audiencia o audiencias que se espera encontrar en un JWT de cliente. |
| Si proporciona varias audiencias, debe especificar cómo gestionarlas. Sus opciones son:
|

Para definir una audiencia, configure config.audience. Hay dos campos que se configuran:
Campo | Descripción |
|---|---|
| Una matriz de cadenas que especifican la audiencia o audiencias que se espera encontrar en un JWT de cliente. |
| Booleano. Si |
"config": { "audience": [ "<JWT Audience>", ], "requireAnyAudience": <boolean>, }
Uso de la autenticación JWT
Puede registrar nuevos usuarios de JWT personalizados e iniciar sesión mediante uno de los SDK de Realm o un servicio API.
SDK de Realm
Para obtener ejemplos de código que demuestran cómo registrarse e iniciar sesión mediante la autenticación JWT personalizada, consulte la documentación del SDK de Realm para su idioma y plataforma preferidos:
Servicios API
Puede autenticar las solicitudes de la API de datos mediante el proveedor JWT personalizado. Puede exigir a los usuarios que creen cuentas antes de usar un servicio o configurar los puntos finales de su API para que creen automáticamente una nueva cuenta de usuario si la solicitud contiene un JWT válido que no coincide con un usuario existente. Existen dos enfoques para usar JWT con las API de servicio:
especifique el JWT directamente en el encabezado de solicitud
jwtTokenStringIniciar una sesión de usuario con el JWT e incluir el token de acceso a la sesión como un token portador del encabezado
Authorization.
Para obtener más información, consulte Autenticar solicitudes de API de datos.

