认证与授权


625

Web应用程序上下文有什么区别?我经常看到缩写“ auth”。它代表auth -entication还是auth -orization?还是两者?


51
记住这一点:身份验证检查凭据,授权检查权限。
OnurYıldırım17年

1
跨站点重复:serverfault.com/q/57077
Kyll,

最近,我见过authn用于身份验证和authz授权的缩写
jdf

这回答了你的问题了吗?身份验证和授权之间有区别吗?
paxdiablo

Answers:


864

身份验证是确定某人确实是他们声称的身份的过程。

授权是指确定允许谁执行操作的规则。例如,亚当可能被授权创建和删除数据库,而乌萨玛人仅被授权读取。

这两个概念是完全正交的,独立的,但两者是中央的安全设计,以及未能获得任何一个正确开辟了途径妥协。

就网络应用而言,很粗略地说,身份验证是指检查登录凭据以查看是否将用户识别为已登录,而授权是指在访问控制中查找是否允许用户查看,编辑,删除。或创建内容。


32
这些定义看起来不错,但是它们显然并不是独立的。按照定义,授权不也意味着 认证吗?如果您怀疑亚当亚当,如何允许他进行数据库删除操作?换句话说,如果授权Adam的删除操作,则最有希望的是,这意味着Adam已通过身份验证。
Timo

7
@Timo:一个应用程序可能想同时做这两个,但是无论如何它们都是正交的概念。您的老板可能正在审查员工访问企业关键组件,公司喷气机和啤酒冰箱的授权,而不必担心CCTV供稿中的哪个特定人员与电子表格中的姓名相匹配。后者将是保安人员的关注。
Kerrek SB

1
这些概念绝对是正交的。身份验证不一定能证明您的身份。这可能证明了您对自己的要求,例如年龄。喝酒时,您需要出示ID来验证您的年龄。然后,您可能会被授权饮酒,具体取决于您的年龄和所处的司法管辖区(如果在美国> 21,在欧洲> 18,则可以喝酒)
David Brossard

1
@Sinjai:我想说的是,这些是正交的问题,可以通过单独的设施来解决:例如,门口的(受托)保镖可以确定客户的年龄,并且机构内的不同服务可以具有不同的年龄限制,但都将使用他们从保镖获得的价值做出入场决定。
Kerrek SB

1
另一种看待它的方法(在舞厅示例的上下文中)将认为身份验证是将身份证上的照片与站在您面前的人进行匹配的过程,而授权是验证其年龄的过程符合法律要求。在我看来,这种混合导致线条模糊的因素是,这两个测试还必须同时认识到伪造和强化伪造(ID是伪造的),大多数人倾向于将其视为认证问题。比对auth-c和auth-z认证同样重要。
瑞安·汉森

660

简而言之,请。:-)

身份验证 =登录名+密码(您是谁)

授权 =权限(您可以执行的操作)

简短的“ auth”最有可能指第一个或两者。


3
甜如
小菜一碟

我喜欢这个,简短而甜蜜。
国王

5
然后我仍然不明白为什么HTTP授权标头会携带身份验证信息……这不是不幸的命名吗?
詹斯

@Jens简短答案:是的。罗伊·菲尔德(Roy Fielding)当时还不知道... ;-) </ tongue-in-cheek>
Per Lundberg

@Jens我也想知道。我发现这个答案的直觉很有帮助。由于HTTP是无状态的,因此身份验证信息必须与每个请求一起发送,而不仅仅是开始和结束请求(例如,建立安全会话,并且发送请求之间不进行身份验证)。因此,该请求标头应为授权,因为它几乎总是承载其他目的(获取数据,img,...),而不仅仅是身份验证
MinhNghĩa

83

正如身份验证与授权所说的那样:

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

  • 用户是谁?
  • 用户真的是他/她自己代表的人吗?

相比之下,授权是一种机制,系统通过该机制确定特定的经过身份验证的用户对系统控制的安全资源应具有的访问级别。例如,可以设计数据库管理系统,以便为某些特定的个人提供从数据库中检索信息的能力,而不是为更改存储在数据库中的数据的能力,同时为其他个人提供更改数据的能力。授权系统提供以下问题的答案:

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

也可以看看:


34

我更喜欢验证许可而不是认证和授权。

在我的脑海和代码中,更容易想到“验证”和“许可”,因为这两个词

  • 听起来不一样
  • 没有相同的缩写

身份验证是验证,授权是检查权限。身份验证既可以表示,也可以用作“用户身份验证”,即“用户身份验证”


2
IMHO验证似乎比身份验证更开放,即使身份验证似乎是某种验证,但并非每个验证都是身份验证...所以我要说的是始终需要一个上下文:用户访问验证等,身份验证似乎总是发生在“他真的是那个家伙/机器吗?”这个领域。(如果我错了,请打我,而不是说母语的人,但是:“验证”所提供的信息是准确的还是认证似乎与知道人/机器是他/它所假装的人有关)
Beachwalker

14

混淆是可以理解的,因为两个词听起来很相似,并且概念经常紧密相关并一起使用。另外,如前所述,常用的缩写Auth也无济于事。

其他人已经很好地描述了身份验证和授权的含义。这是一条简单的规则,可帮助将两者明确分开:

  • 验证ENTI阳离子验证您的标识ENTI TY(或真实性,如果你喜欢的)
  • 作者化验证您的作者,两者均,即您的访问权,并可能改变一些东西。

12

我试图创建一个图像来用最简单的词来解释

1)身份验证的意思是“您说的是您吗?”

2)授权的意思是“您应该能够做自己想做的事吗?”。

下图也对此进行了描述。

在此处输入图片说明

我试图用最好的术语来解释它,并创建了相同的图像。


4

身份验证是验证所声明身份的过程。

  • 例如用户名/密码

通常后跟授权,这是您可以执行此操作的批准。

  • 例如权限

这个答案已经给出了深刻的解释。
Sonu patel

3

添加到@Kerrek的答案;

身份验证采用通用形式(所有员工均可登录计算机)

授权是专用形式(但管理员只能在Machine中安装/卸载应用程序)


1
“可以”一词仅适用于授权。身份验证与登录几乎没有关系。与我无关,我可以通过多种方式(不仅仅是用户名/密码)来验证您是Boobalan。一旦我通过身份验证并知道您是谁,我极可能不会授权您登录或在我的网站上进行任何操作。您已通过身份验证,但不能做迪德利蹲。在谈论身份验证时使用“可以”一词是令人困惑和不正确的。
Suamere 2015年


1

定义

身份验证 -您是自称的人吗?

授权 -您是否有权做您想做的事?

网路应用程式使用Google登入。用户成功登录后,Google会发回邮件:

  1. JWT令牌。可以对其进行验证和解码以获得身份验证信息。令牌是由Google签名的吗?用户的名字和电子邮件是什么?
  2. 访问令牌。这授权网络应用代表用户访问Google API。例如,应用程序可以访问用户的Google日历事件吗?这些权限取决于请求的范围以及用户是否允许。

另外:

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

JWT令牌(从Google登录过程中接收到)被发送到公司的授权服务器,以确定用户是否具有该组织的托管域(email@company.com)的G Suite帐户?如果愿意,他们是否是为客户支持而创建的公司Google小组的成员?如果以上所有条件为是,我们可以认为它们已通过身份验证

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


0

Authentication 是一个验证过程:

  • 通过提供证明(秘密密钥,生物特征识别,短信...)在系统中的用户身份(用户名,登录名,电话号码,电子邮件等)。多因素身份验证作为扩展。
  • 电子邮件检查使用 digital signature
  • 校验和

Authorization是之后的下一步Authentication。它与资源的权限/角色/特权有关。OAuth(开放式授权)是授权的示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.