Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

验证 GraphQL 请求身份

在此页面上

  • Overview
  • 持有者身份验证
  • 档案标头
  • 电子邮件/密码
  • API 密钥
  • 自定义 JWT

GraphQL API 要求传入请求包含发出请求的用户的身份验证信息。这使得 API 可以强制执行规则并验证每个操作的文档模式。

请求必须在特定请求标头中包含身份验证数据。App Services 使用以下流程对给定请求进行身份验证:

  1. 检查是否有 Authorization标头。 如果存在,则请求必须使用带有有效用户访问权限令牌的持有者身份验证。 如果令牌无效,则请求失败。

  2. 如果Authorization标头不存在,请检查Credential headers 。 标头必须包含应用程序用户的有效电子邮件/密码、 API密钥或自定义 JSON Web 令牌凭证。

注意

必须先启用身份验证提供者,用户才能向其进行身份验证。

GraphQL API 支持持有者身份验证,它允许您通过在 Authorization 标头中包含有效的用户访问令牌来对请求进行身份验证。要了解如何获取和管理访问令牌,请参阅管理用户会话

Authorization 标头使用以下格式:

Authorization: Bearer <AccessToken>

例如,以下请求使用持有者身份验证:

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}"
}'

通常,访问令牌持有者的身份验证具有更高的吞吐量,并且比凭证标头更安全。请尽量使用访问令牌,而不是凭证标头。令牌允许运行多个请求,而无需重新对用户进行身份验证。它还能让您从执行 CORS 的网络浏览器发送请求。

重要

请勿在面向用户的客户端中使用 API 密钥

如果您从浏览器或其他面向用户的客户端应用程序进行身份验证,请避免使用 API 密钥登录。请改用其他接受用户提供的档案的身份验证提供者。切勿在本地存储 API 密钥或其他敏感档案。

不记名令牌验证可用于:

  • 从网络浏览器发送请求。

  • 发送多个请求,而无需存储用户档案或在每次请求时提示用户。

  • 从也使用 Realm SDK 对用户进行身份验证的应用发送请求。

您可以通过在请求标头中包含用户的登录档案来对 GraphQL 请求进行身份验证。要包含的确切标头取决于身份验证提供者。

档案标头对于以下情形很有用:

  • 从服务器端应用程序发送的请求

  • 从命令行工具发送的请求

  • 从 GraphQL 客户端(如 Postman)发送的手动或测试请求

重要

由于 跨源资源共享 ,您无法使用凭证标头对从 Web 浏览器发送的请求进行身份验证 限制。相反,要对来自浏览器的 GraphQL 请求进行身份验证,请使用持有者身份验证。

要以电子邮件/密码用户身份验证 GraphQL 请求,请在该请求的 emailpassword 标头中包含该用户的档案。

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}"
}'

要使用 API 密钥对 GraphQL 请求进行身份验证,请在请求的 apiKey 标头中包含 API 密钥。

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}"
}'

重要

请勿在面向用户的客户端中使用 API 密钥

如果您从浏览器或其他面向用户的客户端应用程序进行身份验证,请避免使用 API 密钥登录。请改用其他接受用户提供的档案的身份验证提供者。切勿在本地存储 API 密钥或其他敏感档案。

要将 GraphQL 请求作为自定义 JWT 用户进行身份验证,请在请求的 jwtTokenString 标头中包含 JWT 字符串。

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}"
}'

后退

公开集合中的数据