什么是 AuthZ(授权)?
探索 AuthZ 的定义,AuthN 与 AuthZ 的区别,AuthZ 的工作原理以及授权的最佳实践。
什么是 AuthZ,它与 AuthN 有何不同?
AuthZ 是 授权 的缩写。授权是一种与 身份验证 分开的机制。身份验证识别你是谁,而授权决定你是否可以访问特定资源以及可以对其执行哪些操作。
在现实世界的例子中,资源可以包括软件、系统、文档、订单和资产。授权为这些资源增加了额外的控制层,指定谁可以在何种条件下访问这些资源。
AuthZ 如何工作?
授权与身份验证是分开的,但通常与之相关。例如,标准协议如 OAuth 2.0,OIDC 和 SAML 都包含基于令牌的授权机制。
在基于令牌的授权系统中,授权服务器向用户授予 访问令牌。这个包含权限的令牌决定用户是否可以访问某些资源。
直接向用户分配权限可能效率低下,特别是在需要更详细条件时。例如,访问可能依赖于具体环境,如用户的位置,这使得访问控制策略对于更好的权限管理是必需的。
以下是授权工作方式的分步高级流程:
- 发起身份验证:用户通过选择标识符和方法登录,例如使用电子邮件和密码。
- 授权请求:登录后,用户请求访问资源,包括其用户 ID 和角色等详细信息。
- 访问控制验证:系统根据预定义的授权策略检查请求,如基于角色或基于属性的规则。
- 授权决定:系统根据策略和权限确定是授予还是拒绝访问。
要详细了解 OAuth 2.0 授权请求流程,请查看 授权请求
授权类型有哪些?
基于角色的访问控制及其工作原理
基于角色的访问控制 (RBAC) 使用角色来管理访问。每个用户被分配一个或多个预定义角色,每个角色包括一组权限。RBAC 的关键是了解主体(或用户)、角色和权限之间的关系。
了解基于角色的访问控制 (RBAC) 的工作方式,你需要了解:
- 主体:这些可以是用户或非人类实体,例如
用户
或机器对机器应用程序
。 - 角色:代表工作职责或责任。例子有:
管理员
成员
- 权限:指定可以对特定资源执行哪些操作,例如
读取:订单
。
基于属性的访问控制及其工作原理
基于属性的访问控制 (ABAC) 广泛用于授权,通过使用实体的特定属性而不仅仅是角色来支持更复杂的场景。
例如,一家公司管理一个全球文档共享平台,员工需要根据他们的工作角色、位置和文件的分类级别进行受控访问。
属性可以设计如下:
- 用户属性:角色(例如,“经理”,“工程师”),位置(例如,“美国”,“欧洲”)。
- 资源属性:文档类型(例如,“财务报告”,“设计文件”),分类级别(例如,“机密”)。
- 环境属性:访问时间(例如,“工作时间内”),设备类型(例如,“公司笔记本电脑”)。
还有其他访问控制模型,例如 基于策略的访问控制 (PBAC) 。每个模型都有其优缺点,模型的选择取决于你的使用场景和要求。
AuthZ 用例和例子
在 B2C 软件中
B2C 软件通常需要基于业务需求的特定角色。例如,一个书店管理应用程序可能包括具有不同职责的角色,如管理资源和服务。
在 B2B 多租户应用中
B2B 应用通常使用多租户架构,其中每个租户代表一个组织。在组织内,需要像管理员和成员这样的角色。这就是授权 (AuthZ) 在组织级别管理用户的关键作用,通常使用基于角色的访问控制 (RBAC)。
机器对机器的授权
机器对机器 通信直接在服务之间发生,无需人工交互。例如, 通过调用 API 服务。通常涉及令牌(例如,OAuth 2.0 访问令牌)来确保安全、动态和细颗粒度的访问。
AuthZ 的最佳实践是什么?
以下是一些 授权 (AuthZ) 的最佳实践,以确保安全和有效的访问控制:
-
最小权限原则
这可以最大限度地降低未经授权的访问或由于帐户泄露造成的损害。用户和系统应仅能访问其角色所需的资源和操作。
-
采用基于令牌的授权
基于令牌的访问控制提供了更灵活和细粒度的控制,同时遵循开放标准。使用安全令牌(例如 OAuth 2.0,JWT)来授予时间敏感和范围明确的访问。
-
定期审核和监控
定期审查访问日志和授权策略对于发现异常或过期权限是必要的。
-
应用职责分离
从实施细粒度权限开始,例如定义特定操作和资源(例如读取、写入、删除)。在创建角色时,使用清晰的角色名称并执行职责分离,以尽量减少单个用户的欺诈或错误风险。
-
支持多租户(如果适用)
对于多租户系统,租户隔离很重要。通过与基于角色的访问控制相结合,可以实现数据资源的分隔,确保适当的角色只能访问其租户内的资源。这可以防止意外或恶意访问其他租户的资源。
-
动态撤销访问
设计 AuthZ 系统时,确保在条件变化时(例如角色更新,或雇佣终止)可以立即更新或撤销权限。这可以通过动态 API 检查,webhooks 或其他方法来实现。其目标是在实时中防止未经授权的访问。
AuthZ(授权)与 Auth(认证)之间有何区别?
认证和授权在身份和访问管理中的目的和过程上存在区别。
AuthN(认证)回答“你是谁以及你拥有什么标识”的问题。它是验证用户、服务或设备身份的过程。认证确保尝试访问系统或资源的实体是真实的。常见方法包括密码、生物特征和双因素认证 (2FA)。例如,当你使用电子邮件和密码登录帐户时,系统通过身份验证确认你的身份。
AuthZ(授权)回答“你被允许做什么?”的问题。它是基于用户权限或角色授予或拒绝访问资源的过程。授权发生在身份验证之后,决定经过身份验证的用户可以执行哪些操作。例如,登录后,管理员用户可能可以修改设置,而普通用户只能查看它们。
总结来说,AuthN(认证)确认身份,而 AuthZ(授权)定义访问权限。认证先发生,然后是授权,以确保资源的安全和适当使用。
使用 Logto 构建 AuthZ(授权)
Logto Cloud 提供基于开放标准协议如 OIDC、OAuth 2.0 和 SAML 的关键授权服务。功能包括 基于角色的访问控制,多租户组织 和 自定义令牌声明,以从各个方面满足你的授权需求。