验证 GraphQL 请求身份
Overview
GraphQL API 要求传入请求包含发出请求的用户的身份验证信息。这使得 API 可以强制执行规则并验证每个操作的文档模式。
请求必须在特定请求标头中包含身份验证数据。App Services 使用以下流程对给定请求进行身份验证:
检查是否有
Authorization
标头。 如果存在,则请求必须使用带有有效用户访问权限令牌的持有者身份验证。 如果令牌无效,则请求失败。如果
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 请求,请在该请求的 email
和 password
标头中包含该用户的档案。
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 密钥
要使用 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 密钥或其他敏感档案。
自定义 JWT
要将 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}" }'