Overview
La API GraphQL requiere que las solicitudes entrantes incluyan información de autenticación del usuario que las realiza. Esto permite a la API aplicar reglas y validar los esquemas de documentos en cada operación.
Las solicitudes deben incluir datos de autenticación en encabezados específicos. App Services utiliza el siguiente proceso para autenticar una solicitud:
Compruebe si hay un
Authorizationencabezado. Si está presente, la solicitud debe utilizar Autenticación de portador con un token de acceso de usuario válido. Si el token no es válido, la solicitud falla.Si el
Authorizationencabezado no está presente, verifique los encabezados de credenciales. Estos deben contener credenciales válidas de correo electrónico/contraseña, clave API o JWT personalizadas para el usuario de la aplicación.
Nota
Debe activar un proveedor de autenticación antes de que los usuarios puedan autenticarse con él.
Autenticación del portador
La API de GraphQL admite la autenticación de portador, lo que permite autenticar una solicitud incluyendo un token de acceso de usuario válido en el Authorization encabezado. Para obtener información sobre cómo obtener y administrar un token de acceso,consulte Administrar sesiones de usuario.
El encabezado de autorización utiliza el siguiente formato:
Authorization: Bearer <AccessToken>
Por ejemplo, la siguiente solicitud utiliza la autenticación Bearer:
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/<AppID>/graphql' \ --header 'Authorization: Bearer <AccessToken>' \ --header 'Content-Type: application/json' \ --data-raw '{ "query": "query AllMovies {\n movies {\n title\n year\n }\n}" }'
En general, la autenticación de portador con un token de acceso ofrece mayor rendimiento y es más segura que los encabezados de credenciales. Utilice un token de acceso en lugar de encabezados de credenciales siempre que sea posible. El token permite ejecutar múltiples solicitudes sin tener que volver a autenticar al usuario. También permite enviar solicitudes desde un navegador web que implemente CORS.
Importante
No uses claves API en clientes orientados al usuario
Si se autentica desde un navegador u otra aplicación cliente, evite usar una clave API para iniciar sesión. En su lugar, utilice otro proveedor de autenticación que acepte las credenciales proporcionadas por el usuario. Nunca almacene localmente claves API ni otras credenciales confidenciales.
La autenticación del portador es útil para:
enviando solicitudes desde un navegador web.
enviar múltiples solicitudes sin almacenar las credenciales del usuario ni preguntarle en cada solicitud.
enviar solicitudes desde una aplicación que también utilice un Realm SDK para autenticar usuarios.
Encabezados de credenciales
Puedes autenticar una solicitud GraphQL incluyendo las credenciales de inicio de sesión del usuario en los encabezados de la solicitud. Los encabezados exactos que se deben incluir dependen del proveedor de autenticación.
Los encabezados de credenciales son útiles para:
solicitudes enviadas desde una aplicación del lado del servidor
solicitudes enviadas desde una herramienta de línea de comandos
solicitudes manuales o de prueba enviadas desde un cliente GraphQL como Postman
Importante
No se pueden usar encabezados de credenciales para autenticar solicitudes enviadas desde un navegador web debido a restricciones de uso compartido de recursos entre orígenes. En su lugar, para autenticar solicitudes GraphQL desde un navegador, utilice la autenticación de portador.
Correo electrónico/Contraseña
Para autenticar una solicitud GraphQL como un usuario de correo electrónico/contraseña, incluya las credenciales del usuario en email los password encabezados y de la solicitud.
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/<AppID>/graphql' \ --header 'email: <EmailAddress>' \ --header 'password: <Password>' \ --header 'Content-Type: application/json' \ --data-raw '{ "query": "query AllMovies {\n movies {\n title\n year\n }\n}" }'
Llave API
Para autenticar una solicitud GraphQL con una clave API, incluya la clave API en el apiKey encabezado de la solicitud.
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/<AppID>/graphql' \ --header 'apiKey: <APIKey>' \ --header 'Content-Type: application/json' \ --data-raw '{ "query": "query AllMovies {\n movies {\n title\n year\n }\n}" }'
Importante
No uses claves API en clientes orientados al usuario
Si se autentica desde un navegador u otra aplicación cliente, evite usar una clave API para iniciar sesión. En su lugar, utilice otro proveedor de autenticación que acepte las credenciales proporcionadas por el usuario. Nunca almacene localmente claves API ni otras credenciales confidenciales.
JWT personalizado
Para autenticar una solicitud GraphQL como un usuario JWT personalizado, incluya la cadena JWT en el jwtTokenString encabezado de la solicitud.
curl -X POST 'https://services.cloud.mongodb.com/api/client/v2.0/app/<AppID>/graphql' \ --header 'jwtTokenString: <JWT>' \ --header 'Content-Type: application/json' \ --data-raw '{ "query": "query AllMovies {\n movies {\n title\n year\n }\n}" }'