认证与授权

710
网页应用程序有什么区别?简单来说是什么?
我经常看到缩写“auth”。它是指“auth”-entication(认证)还是“auth”-orization(授权)?还是两者都有?

83
记住这点:认证检查凭据,授权检查权限。 - Onur Yıldırım
1
跨站点重复:https://serverfault.com/q/57077/ - Kyll
1
最近我看到缩写词 authn 用于认证,authz用于授权。 - jdf
这回答了你的问题吗?认证和授权有什么区别? - paxdiablo
17个回答

940

认证是确认某人是否真的是他们所声称的身份的过程。

授权是指确定谁有权做什么的规则。例如,Adam可能被授权创建和删除数据库,而Usama只被授权阅读。

这两个概念完全正交和独立,但是两者都是安全设计的核心,而且任何一个出现问题都会导致被攻击的风险。

就Web应用程序而言,简单来说,认证是当您检查登录凭据以查看用户是否已登录时的过程,而授权是当您在访问控制中查找允许用户查看、编辑、删除或创建内容时的过程。


47
定义看起来没问题,但它们似乎并不独立。按照定义,授权是否也意味着认证?如果你怀疑执行删除操作的人是不是亚当,那么怎么能允许他执行数据库删除操作呢?换句话说,如果亚当的删除操作已经被授权,那么很有可能是因为已经验证了亚当的身份。 - Timo
10
应用程序可能希望同时执行这两个操作,但它们是无关的概念。你的上司可以检查员工对业务关键组件、公司私人飞机和啤酒冰箱的授权情况,而不用担心闭路电视录像中的哪个特定个体与电子表格中的姓名匹配。后者是保安人员需要关注的事情。 - Kerrek SB
1
这些概念确实是正交的。认证不一定是证明你的身份,它可以是证明关于你自己的声明,例如年龄。当你喝酒时,你通过展示身份证明来验证你的年龄。然后根据你的年龄和所在的司法管辖区,你可能会被授权饮酒(如果在美国年满21岁,在欧洲年满18岁,则可以饮酒)。 - David Brossard
2
@Sinjai:我认为重点在于这些是正交的问题,它们可以通过不同的设施来解决:例如,门口的(可信)保安可以确定客户的年龄,建筑内的不同服务可以有不同的年龄限制,但都将使用他们从保安那里得到的值来做出入场决策。 - Kerrek SB
1
想象一下你在一个需要塑料卡通行证才能进入的地方工作。我会偷走你的通行证,但仍然可以授权打开你被授权打开的门。但是身份验证失败了,因为至少有一个警卫应该将我的脸与塑料卡通行证上的照片进行比较。 - DiSaSteR
显示剩余5条评论

725

简单来说:

认证 = 登录 + 密码 (确认你是谁)

授权 = 权限 (允许你做什么)

简称“auth”最可能指的是第一个或两个都包括。


8
甜如蛋糕一般 :) - devansvd
我喜欢这个,简短而甜美。 - King
11
我仍然不明白为什么一个 HTTP Authorization header 携带认证信息... 这不是名字起得不太好吗? - Jens
1
@Jens 简短回答:是的。Roy Fielding 那时候不知道更好的选择... ;-) </tongue-in-cheek> - Per Lundberg
2
@Jens 我也在想这个问题。我觉得 这个回答 的直觉很有帮助。由于 HTTP 是 无状态 的,身份验证信息必须随着每个请求一起发送,而不仅仅是开始和结束请求(比如建立安全会话,并在之间的请求中发送不带认证的请求)。因此,该请求头应该是 authorization,因为它几乎总是携带其他意图(获取数据、图像等),而不仅仅是身份验证。 - Minh Nghĩa
请记住,身份验证可以通过许多方式进行,而不仅仅是用户名和密码,例如指纹、面部识别、短信等。从这些角度考虑,您会意识到密码实际上是一种奇怪的身份验证方式。它假定您是世界上唯一知道或可能知道您的密码的人。因此,如果您知道密码,您必须是自己所说的那个人。如果你问我,这有点夸张。 - d512

86

正如身份验证与授权所述:

身份验证是系统可以安全地识别其用户的机制。认证系统提供答案回答以下问题:

  • 谁是用户?
  • 用户是否真的是自己所声称的那个人?

授权则是系统确定特定已验证用户应该对系统控制的受保护资源拥有什么级别的访问权限的机制。例如,数据库管理系统可能被设计为向某些指定的人提供从数据库检索信息的能力,但不允许更改存储在数据库中的数据,并给予其他人更改数据的权限。授权系统提供答案回答以下问题:

  • 用户X是否被授权访问资源R?
  • 用户X是否被授权执行操作P?
  • 用户X是否被授权在资源R上执行操作P?

另请参阅:


40

在用户上下文中:

认证 = 验证用户的身份是否真实(你可以在技术层面上验证很多不同的东西,比如密码、税务信息、社保信息、驾照、指纹或其他生物特征...但通常用户名/密码就足够了)。

授权 = 允许用户做某事(你可以设置角色 ['管理员'、'卖家'、'买家'...] 与权限 ['访问控制中心'、'删除产品'...] 并将这些角色分配给用户,然后验证用户是否具有允许执行操作的角色)。

权限与 CRUD 操作直接相关,如果构建一个 UI,你可以将对象列为行,并在 4 列复选框中显示该对象权限对应的创建、读取、更新、删除操作权限。

就像我上面的例子中,“访问控制中心”是控制中心对象的完整创建、读取、更新和删除访问权限,而“删除产品”是产品对象的删除访问权限。

注意:HTTP 授权标头旨在授予对资源的访问权限,但实际上被用作所有资源访问的身份验证。

在我的脑海和代码中,将 验证权限 作为思考的方式更容易,因为这两个词:

  • 听起来不一样
  • 没有相同的缩写
  • 授权的实际实现通常涉及实现 角色和权限

认证是验证,授权是检查权限。Auth 可以表示任何一个,但更常用作“用户 Auth”,即“用户认证”。很多时候并没有明确的授权实现(角色和权限),只是使用认证来提供执行所有可用操作所需的授权。因此,这就是 Auth。


2
在我看来,验证的范围似乎比认证稍微开放一些,尽管认证似乎是某种形式的验证,但并不是每种验证都是认证...所以我认为总是需要一个上下文:用户访问验证等,认证似乎总是发生在“他/它是否真的是那个人/机器?”的领域(如果我错了,请指出,我不是母语为英语的人,但是:“验证”提供的信息是否准确,而认证似乎与知道该人/机器是假扮成的那个人/机器有关)。 - Beachwalker
是的,我所说的是在“用户”这个上下文中。在其他上下文中,所有术语都可能有其他含义。 - Aditya Mittal

17
混淆是可以理解的,因为这两个词听起来相似,而且概念通常紧密相关并一起使用。另外,如前所述,常用的缩写Auth也没有帮助。
其他人已经很好地描述了认证和授权的含义。这里有一个简单的规则,可以帮助清楚地区分这两个概念:
  • 验证您的身份(或者如果您更喜欢这个词,是您的真实性)
  • 权验证您的权限,即访问或可能更改某些内容的权利。

15

我尝试用最简单的话语来解释这个问题:

1) 鉴权意味着“你是不是你所说的那个人?”

2) 授权意味着“你能否执行你试图做的事情?”。

下方图片也描述了这一点。

输入图像描述

我已经尽可能以最好的方式解释它,并创建了相同的图片。


5

身份验证是验证所宣称的身份的过程。

  • 例如:用户名/密码

通常会跟随授权,即您可以执行此操作和那个操作的批准。

  • 例如:权限

4

除了@Kerrek的回答之外,

身份验证是一种通用形式(所有员工都可以登录到计算机)

授权是一种专门化形式(仅管理员可以在计算机中安装/卸载应用程序)


3
“can”这个词只适用于授权。认证与登录几乎没有关系。我可以通过多种方式对您进行身份验证(不仅仅是用户名/密码)。一旦我对您进行身份验证并知道您是谁,我可能不会授权您登录或在我的网站上执行任何操作。您已经被认证,但无法做任何事情。在谈论认证时使用“can”这个词是令人困惑和不正确的。 - Suamere

4

认证是验证您的登录用户名和密码的过程。

授权是验证您是否能够访问某些内容的过程。


4
这个“答案”没有为已经给出的答案增加任何内容。 - Ojonugwa Jude Ochalifu

3

定义

认证 - 你是否是你所声称的人?

授权 - 你是否被授权执行你要执行的操作?

示例

一个 web 应用程序使用 Google 登录。用户成功登录后,Google 回传:

  1. JWT 令牌。可以通过验证和解码来获取认证信息。该令牌是否由 Google 签名?用户的姓名和电子邮件是什么?
  2. 访问令牌。此令牌为网页应用程序授权,代表用户访问 Google API。例如,应用程序能否访问用户的 Google 日历事件?这些权限取决于请求的范围以及用户是否允许。

此外:

公司可能有一个管理仪表板,允许客户支持管理公司的用户。公司使用 Google 登录而不是提供自定义注册解决方案,以便客户支持可以访问此仪表板。

JWT 令牌(从 Google 登录过程中接收到)被发送到公司的授权服务器,以确定用户是否拥有该组织托管域名(email@company.com)的 G Suite 帐户?如果是,他们是否是为客户支持创建的公司 Google 组的成员?如果是,则可以将其视为已认证

然后,公司的授权服务器向仪表板应用程序发送访问令牌。此访问令牌可用于对公司的资源服务器进行授权请求(例如,能否对端点进行 GET 请求以返回所有公司用户)。


这是一个非常详细的回答,涵盖了技术方面。谢谢! - ansh sachdeva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接