我经常看到缩写“auth”。它是指“auth”-entication(认证)还是“auth”-orization(授权)?还是两者都有?
认证是确认某人是否真的是他们所声称的身份的过程。
授权是指确定谁有权做什么的规则。例如,Adam可能被授权创建和删除数据库,而Usama只被授权阅读。
这两个概念完全正交和独立,但是两者都是安全设计的核心,而且任何一个出现问题都会导致被攻击的风险。
就Web应用程序而言,简单来说,认证是当您检查登录凭据以查看用户是否已登录时的过程,而授权是当您在访问控制中查找允许用户查看、编辑、删除或创建内容时的过程。
简单来说:
认证 = 登录 + 密码 (确认你是谁)
授权 = 权限 (允许你做什么)
简称“auth”最可能指的是第一个或两个都包括。
正如身份验证与授权所述:
身份验证是系统可以安全地识别其用户的机制。认证系统提供答案回答以下问题:
- 谁是用户?
- 用户是否真的是自己所声称的那个人?
授权则是系统确定特定已验证用户应该对系统控制的受保护资源拥有什么级别的访问权限的机制。例如,数据库管理系统可能被设计为向某些指定的人提供从数据库检索信息的能力,但不允许更改存储在数据库中的数据,并给予其他人更改数据的权限。授权系统提供答案回答以下问题:
- 用户X是否被授权访问资源R?
- 用户X是否被授权执行操作P?
- 用户X是否被授权在资源R上执行操作P?
在用户上下文中:
认证 = 验证用户的身份是否真实(你可以在技术层面上验证很多不同的东西,比如密码、税务信息、社保信息、驾照、指纹或其他生物特征...但通常用户名/密码就足够了)。
授权 = 允许用户做某事(你可以设置角色 ['管理员'、'卖家'、'买家'...] 与权限 ['访问控制中心'、'删除产品'...] 并将这些角色分配给用户,然后验证用户是否具有允许执行操作的角色)。
权限与 CRUD 操作直接相关,如果构建一个 UI,你可以将对象列为行,并在 4 列复选框中显示该对象权限对应的创建、读取、更新、删除操作权限。
就像我上面的例子中,“访问控制中心”是控制中心对象的完整创建、读取、更新和删除访问权限,而“删除产品”是产品对象的删除访问权限。
注意:HTTP 授权标头旨在授予对资源的访问权限,但实际上被用作所有资源访问的身份验证。
在我的脑海和代码中,将 验证 和 权限 作为思考的方式更容易,因为这两个词:
认证是验证,授权是检查权限。Auth 可以表示任何一个,但更常用作“用户 Auth”,即“用户认证”。很多时候并没有明确的授权实现(角色和权限),只是使用认证来提供执行所有可用操作所需的授权。因此,这就是 Auth。
- 认证验证您的身份(或者如果您更喜欢这个词,是您的真实性)
- 授权验证您的权限,即访问或可能更改某些内容的权利。
身份验证是验证所宣称的身份的过程。
通常会跟随授权,即您可以执行此操作和那个操作的批准。
除了@Kerrek的回答之外,
身份验证是一种通用形式(所有员工都可以登录到计算机)
授权是一种专门化形式(仅管理员可以在计算机中安装/卸载应用程序)
认证是验证您的登录用户名和密码的过程。
授权是验证您是否能够访问某些内容的过程。
认证 - 你是否是你所声称的人?
授权 - 你是否被授权执行你要执行的操作?
一个 web 应用程序使用 Google 登录。用户成功登录后,Google 回传:
此外:
公司可能有一个管理仪表板,允许客户支持管理公司的用户。公司使用 Google 登录而不是提供自定义注册解决方案,以便客户支持可以访问此仪表板。
JWT 令牌(从 Google 登录过程中接收到)被发送到公司的授权服务器,以确定用户是否拥有该组织托管域名(email@company.com)的 G Suite 帐户?如果是,他们是否是为客户支持创建的公司 Google 组的成员?如果是,则可以将其视为已认证。
然后,公司的授权服务器向仪表板应用程序发送访问令牌。此访问令牌可用于对公司的资源服务器进行授权请求(例如,能否对端点进行 GET 请求以返回所有公司用户)。
authn
用于认证,authz
用于授权。 - jdf