对 Data API 请求进行身份验证
Overview
Data API 端点通常要求传入请求包含调用端点的用户的身份验证信息。这使得端点可以强制执行规则并验证每个请求的文档模式。
请求必须在特定请求标头中包含身份验证数据。App Services 使用以下流程对给定请求进行身份验证:
检查是否有
Authorization
标头。 如果存在,请尝试使用 Bearer Authentication (持有者身份验证)。 标头必须包含有效的用户访问权限令牌。 如果令牌无效,则请求失败。如果
Authorization
标头不存在或未使用"持有者"方案,则请检查凭证标头是否存在。这些标头必须包含应用用户的有效电子邮件/密码、API 密钥或自定义 JWT 凭证。
注意
必须先启用身份验证提供者,用户才能向其进行身份验证。
持有者身份验证
Data API 支持持有者身份验证,可允许您通过在请求的 Authorization
标头中包含有效的用户访问令牌来对请求进行身份验证。要了解如何获取和管理访问令牌,请参阅管理用户会话。
Authorization 标头使用以下格式:
Authorization: Bearer <AccessToken>
例如,以下请求使用持有者身份验证:
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
通常,访问令牌持有者的身份验证具有更高的吞吐量,并且比凭证标头更安全。请尽量使用访问令牌,而不是凭证标头。令牌允许运行多个请求,而无需重新对用户进行身份验证。它还能让您从执行 CORS 的网络浏览器发送请求。
重要
请勿在面向用户的客户端中使用 API 密钥
如果您从浏览器或其他面向用户的客户端应用程序进行身份验证,请避免使用 API 密钥登录。请改用其他接受用户提供的档案的身份验证提供者。切勿在本地存储 API 密钥或其他敏感档案。
不记名令牌验证可用于:
从网络浏览器发送请求。
发送多个请求,而无需存储用户档案或在每次请求时提示用户。
从也使用 Realm SDK 对用户进行身份验证的应用发送请求。
注意
出于安全原因,App Services 不会向客户端应用返回持有者身份验证错误的详情。如果持有者身份验证出现问题,请检查应用程序日志。
档案标头
您可以通过在请求标头中包含用户的登录凭据来对 Data API 请求进行身份验证。要包含的确切标头取决于身份验证提供者。
档案标头对于以下情形很有用:
从服务器端应用程序发送的请求
从命令行工具发送的请求
从 HTTPS 客户端(例如 Postman)发送的手动或测试请求
重要
由于跨源资源共享限制,无法使用凭据标头对从 Web 浏览器发送的请求进行身份验证。相反,要对来自浏览器的数据 API 请求进行身份验证,请使用 Bearer 身份验证。
电子邮件/密码
要以电子邮件/密码用户身份验证 Data API 请求,请在该请求的 email
和 password
标头中包含该用户的档案。
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "email: bob@example" \ -H "password: Pa55w0rd!" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
API 密钥
要使用 API 密钥对数据 API 请求进行身份验证,在请求的 apiKey
标头中包含 API 密钥。
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
重要
请勿在面向用户的客户端中使用 API 密钥
如果您从浏览器或其他面向用户的客户端应用程序进行身份验证,请避免使用 API 密钥登录。请改用其他接受用户提供的档案的身份验证提供者。切勿在本地存储 API 密钥或其他敏感档案。
自定义 JWT
要将 Data API 请求验证为自定义 JWT 用户,请在请求的 jwtTokenString
头部包含 JWT 字符串。
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "jwtTokenString: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJteWFwcC1hYmNkZSIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJleHAiOjIxNDU5MTY4MDB9.E4fSNtYc0t5XCTv3S8W89P9PKLftC4POLRZdN2zOICI" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'