Autenticar solicitações GraphQL
Nesta página
Visão geral
A API do GraphQL requer que as solicitações de entrada incluam informações de autenticação para o usuário que está fazendo a solicitação. Isso permite que a API aplique regras e valide esquemas de documentos para cada operação.
As solicitações devem incluir dados de autenticação em cabeçalhos de solicitação específicos. Os Serviços de apps utilizam o seguinte processo para autenticar um determinado pedido:
Verifique se há um cabeçalho
Authorization
. Se estiver presente, a solicitação deverá usar aAutenticação de Portador com um token de acesso de usuário válido. Se o token for inválido, a solicitação falhará.Se o cabeçalho
Authorization
não estiver presente, verifique se há cabeçalhos de credenciais. Os cabeçalhos devem conter credenciais válidas de e-mail/senha, chave de API ou JWT personalizado para um usuário da aplicativo.
Observação
Você deve habilitar um fornecedor de autenticação antes que os usuários possam se autenticar com ele.
Autenticação do portador
A API GraphQL oferece suporte à autenticação do portador, que permite autenticar uma solicitação incluindo um token de acesso de usuário válido no cabeçalho Authorization
. Para saber como obter e gerenciar um token de acesso, consulte Gerenciar sessões de usuário.
O cabeçalho Autorização utiliza o seguinte formato:
Authorization: Bearer <AccessToken>
Por exemplo, a seguinte solicitação usa Autenticação ao portador:
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}" }'
Em geral, a autenticação de portador com um token de acesso tem uma taxa de transferência mais alta e é mais segura do que os cabeçalhos de credenciais. Use um token de acesso em vez de cabeçalhos de credenciais quando possível. O token permite executar várias solicitações sem autenticar o usuário novamente. Ele também permite enviar solicitações de um navegador da web que exija o CORS.
Importante
Não use chaves de API em clientes direcionados ao usuário
Se você estiver autenticando de um navegador ou de outro aplicativo de cliente voltado para o usuário, evite usar uma chave API para se conectar. Em vez disso, use outro fornecedor de autenticação que tenha credenciais fornecidas pelo usuário. Nunca armazene chaves API ou outras credenciais sensíveis localmente.
A autenticação do portador é útil para:
enviando solicitações de um navegador da web.
enviar várias solicitações sem armazenar credenciais do usuário ou avisar o usuário em cada solicitação.
enviar solicitações de um aplicativo que também usa um Realm SDK para autenticar usuários.
Cabeçalhos de credencial
Você pode autenticar uma solicitação do GraphQ incluindo as credenciais de login do usuário nos cabeçalhos da solicitação. Os cabeçalhos exatos a incluir dependem do fornecedor de autenticação.
Cabeçalhos de credencial são úteis para:
solicitações enviadas de um aplicativo do lado do servidor
pedidos enviados de uma ferramenta de linha de comando
solicitações manuais ou de teste enviadas de um cliente GraphQL como o Postman
Importante
Não é possível usar cabeçalhos de credenciais para autenticar solicitações enviadas de um navegador da Web devido às restrições do Cross-Origin Resource Sharing. Em vez disso, para autenticar solicitações GraphQL de um navegador, use a Autenticação de Portador.
E-mail/senha
Para autenticar uma solicitação do GraphQ como um usuário de e-mail/senha, inclua as credenciais do usuário nos cabeçalhos email
e password
do pedido.
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}" }'
Chave API
Para autenticar uma solicitação do GraphQ com uma chave API, inclua a chave API no cabeçalho apiKey
da solicitação.
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
Não use chaves de API em clientes direcionados ao usuário
Se você estiver autenticando de um navegador ou de outro aplicativo de cliente voltado para o usuário, evite usar uma chave API para se conectar. Em vez disso, use outro fornecedor de autenticação que tenha credenciais fornecidas pelo usuário. Nunca armazene chaves API ou outras credenciais sensíveis localmente.
JWT personalizado
Para autenticar uma solicitação do GraphQ como um usuário JWT personalizado, inclua a cadeia de caracteres JWT no cabeçalho jwtTokenString
da solicitação.
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}" }'