验证和管理用户
简介
Atlas App Services 管理应用程序最终用户的身份验证。App Services:
使用基于角色的数据访问规则来确定读取和写入权限。
将每个请求与经过身份验证的用户关联
评估包含请求的每个对象的权限。
通过用户帐户,可以存储和访问每个用户的元数据和自定义数据。
用户通过身份验证提供商登录。每个提供商代表一种特定的身份验证方法。
App Services 包括常见使用案例的内置提供程序,例如 Facebook 和 Google。自定义提供程序允许您集成任何外部身份验证系统。
下图显示了客户端应用、Atlas App Services 和身份验证提供程序如何交互以对用户进行身份验证:
概念
对提供商进行身份验证
在 App Services 中,身份验证提供者是一项模块化服务。此类服务可提供身份验证,并维护有关应用用户的信息。
用户通过向身份验证提供程序提供一组档案来对自身进行身份验证。通过有效凭证,提供者将返回与用户关联的唯一身份。 App Services 将其记录为活跃用户。
App Services 包括用于常见使用案例的内置身份验证提供程序。这包括:
您可以配置自定义提供程序以集成外部身份验证系统。
重要
应用需进行用户身份验证
每个应用程序均须至少配置并启用一个身份验证提供程序。如果没有至少一个提供程序,则任何客户端应用程序都无法进行连接。要了解如何配置和启用身份验证提供程序,请参阅:身份验证提供程序。
用户账户
用户账户表示应用程序的单个不同用户。当身份验证提供程序验证唯一身份时,App Services 会创建用户。您可以从身份验证提供程序获取用户元数据,例如电子邮件或生日。您可以将每个用户与自定义数据相关联。
提示
苹果帐号删除要求
Apple 要求通过 App Store 分发的应用程序 必须为任何创建帐户的用户提供删除帐户的选项。无论应用使用的是必须手动注册用户的身份验证方法(如电子邮件/密码身份验证),还是自动创建用户的身份验证方法(如“通过 Apple 登录”),通过 App Store 分发的应用都必须实现用户帐户删除功能。
身份验证提供者身份
App Services 将用户的登录元数据存储在身份验证提供程序的标识中。App Services 使用此元数据对用户进行身份验证。
首次登录身份验证提供者时,App Services 会创建一个身份对象。每个对象都包含一个唯一的 ID 以及有关用户的特定提供者的元数据。以后登录时,App Services 将刷新现有身份数据。
一个用户帐户可以有多个身份。Realm SDK 使您能够将身份与现有用户帐户关联。这样,用户就可以通过多个身份提供程序登录一个帐户。有关更多信息,请参阅客户端 SDK 的身份关联文档。
活跃用户
在 Realm SDK 中,您可以登录多个用户,但同一时间只能有一个帐户处于活动状态。活动用户是与应用程序请求关联的用户帐户。
App Services 会以活跃用户身份执行来自客户端应用程序的请求。App Services 会替换该用户的动态引用,例如以该活跃用户身份替换 JSON 表达式中的 %%user
。
可以使用特定的活跃用户或系统用户来执行函数。
系统用户
系统用户是拥有高级权限的内部用户。系统用户可绕过所有规则。您可以作为系统用户而不是提出请求的用户执行函数。触发器在系统用户的上下文中运行。
系统用户对于管理任务很有用。这包括:
需规避规则和查询的任务
需要不受限制访问 MongoDB CRUD 和聚合操作的任务
重要
安全警告
规则不适用于系统用户。以系统用户身份运行的函数可能会成为安全隐患。确保您未将这些函数暴露给未经授权的用户。
例如,使用函数上下文检查活动用户能否调用系统函数。定义一个条件来确定用户是否具有适当的权限,例如:
exports = function() { const activeUser = context.user const adminUserId = context.values.get("adminUserId"); if(activeUser.id == adminUserId) { // The user can only execute code here if they're an admin. } else { throw Error("This user is not allowed to execute the system function") } }
用户会话
用户会话表示经过身份验证的用户可以与应用程序交互的时间段。当用户通过 SDK 登录或通过 HTTPS 进行身份验证时,用户会话开始。除非 SDK 或 API 请求刷新会话,否则会话将在 30 分钟后结束。
要了解如何创建、使用和撤销用户会话,请参阅管理用户会话。
总结
App Services 通过各种身份验证提供者支持身份验证和用户帐户。您可以将用户与多个身份验证提供者相关联。
App Services 支持多个用户同时登录。一次只有一个活动用户。
系统用户是可绕过所有规则的特殊用户。
Realm SDK 会管理访问权限,并刷新构成用户会话的令牌。