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.If the
Authorizationheader is not present, check for Credential Headers. The headers must contain valid Email/Password, API Key, or Custom JWT credentials for an App user.
Nota
Debe activar un proveedor de autenticación antes de que los usuarios puedan autenticarse con él.
Bearer Authentication
La API GraphQL soporta la Autenticación Bearer, la cual permite autenticar una solicitud incluyendo un token de acceso de usuario válido en la cabecera Authorization. Para aprender cómo obtener y administrar un token de acceso, consulta Administrar Sesiones de Usuarios.
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:
requests sent from a server-side application
requests sent from a command-line tool
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
To authenticate a GraphQL request with an API Key, include the API key in the request's apiKey header.
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 Custom JWT, incluya el string JWT en el encabezado jwtTokenString 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}" }'