【问题标题】:Authentication versus Authorization身份验证与授权
【发布时间】:2011-09-27 05:51:10
【问题描述】:

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

【问题讨论】:

标签: security authorization authentication


【解决方案1】:

正如Authentication vs Authorization 所说:

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

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

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

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

另见:

【讨论】:

    【解决方案2】:

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

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

    这两个概念是完全正交和独立的,但两者都是安全设计的核心,如果没有一个正确,就会打开妥协的途径。

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

    【讨论】:

    • 定义看起来不错,但它们似乎并不独立。正如定义的那样,授权是否也暗示 身份验证?如果你怀疑他 Adam,你怎么能允许他的数据库删除操作呢?换句话说,如果 Adam 的删除操作被授权,最有希望的是这意味着 Adam 已通过身份验证。
    • @Timo:一个应用程序可能想要同时做这两件事,但无论如何它们都是正交的概念。您的老板可能正在审查员工对访问企业、公司喷气机和啤酒冰箱的关键组件的授权,而无需担心闭路电视提要中的哪个特定个人与电子表格中的姓名匹配。后者将是保安人员的关注点。
    • 这些概念绝对是正交的。身份验证不一定证明您的身份。它可以证明关于你自己的主张,例如年龄。当你喝酒时,你通过出示身份证来验证你的年龄。然后,根据您的年龄和您所在的司法管辖区,您可能被授权饮酒(如果美国 >21 岁 > 欧洲 18 岁,您可以饮酒)
    • @Sinjai:我认为关键在于这些是正交问题,它们可以通过单独的设施来解决:例如门口的(受信任的)保镖可以确定客户的年龄,机构内的不同服务可以有不同的年龄限制,但都会使用他们从保镖那里获得的价值来做出准入决定。
    • 另一种看待它的方式(在酒吧示例的上下文中)是认为身份验证是将身份证上的照片与站在您面前的人匹配的过程,而授权是验证他们的年龄是否符合法律要求的过程。在我看来,这种混合中导致界限模糊的因素是,这两个测试还必须既能识别又能防止伪造(ID 是假的),大多数人倾向于仅将其视为身份验证问题,而不是对 auth-c 和 auth-z 认证同样重要。
    【解决方案3】:

    简而言之,请。 :-)

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

    授权 = 权限(你可以做什么)

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

    【讨论】:

    • 甜得像一块蛋糕 :)
    • 我喜欢这个,又短又甜。
    • 那我还是不明白为什么HTTP Authorization header会携带认证信息……这名字是不是很不幸?
    • @Jens 简短回答:是的。罗伊菲尔丁当时并不知道... ;-)
    • @Jens 我也想知道。我发现this answer's 直觉很有帮助。由于 HTTP 是无状态,身份验证信息必须与每个请求一起发送,而不仅仅是开始和结束请求(例如,建立安全会话,并在中间发送没有身份验证的请求)。因此,该请求标头应该是授权,因为它几乎总是带有其他意图(获取数据、img、...),而不是单独的身份验证
    【解决方案4】:

    添加到@Kerrek 的答案;

    身份验证是通用形式(所有员工都可以登录机器)

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

    【讨论】:

    • “can”这个词只适用于授权。身份验证与登录几乎没有关系。我可以很好地通过多种方式验证您是 Boobalan(不仅仅是用户名/密码)。一旦我通过身份验证并知道你是谁,我很可能不会授权你登录或在我的网站上做任何事情。您已通过身份验证,但您不能做空腹深蹲。在谈论身份验证时使用“可以”一词令人困惑且不正确。
    【解决方案5】:

    在用户上下文中:

    身份验证 = 验证用户是他声称的身份(您可以在技术上验证许多不同的东西,例如密码、税务信息、社会保障信息、驾驶执照、指纹或其他生物特征……但通常用户名/密码就足够了)

    授权 = 允许用户做某事(您可以设置角色 ['admin', 'seller', 'buyer'...] 具有 权限 ['访问控制中心'、'删除产品'...] 并将这些角色分配给用户,然后验证用户是否具有允许他执行操作的角色)

    权限与 CRUD 操作有直接关系,因此如果构建 UI,您可以将对象列为行,并在 4 列中为任何给定角色创建、读取、更新、删除该对象权限的复选框。

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

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

    在我的头脑和代码中更容易想到 verificationpermissions,因为这两个词

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

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

    【讨论】:

    • 恕我直言,验证似乎比身份验证具有更开放的范围,尽管身份验证似乎是某种验证,但并非每个验证都是身份验证......所以我想说总是需要上下文:用户访问验证等,认证似乎总是发生在“他真的是那个人/机器吗?”的领域。 (如果我错了,请打我,不是母语人士,但是:“验证”提供的信息是准确的,而身份验证似乎与知道人/机器是他/它假装的人有关)
    • 是的,我说的是“用户”。在其他情况下,所有术语都可以表示其他含义。
    【解决方案6】:

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

    • 例如用户名/密码

    后面通常是authorization,也就是你可以做这做那的批准。

    • 例如权限

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

      • 这个“答案”不会对已经给出的答案添加任何内容。
      【解决方案8】:

      我试图创建一个图像来用最简单的语言来解释这一点

      1) 身份验证的意思是“你就是你所说的那个人吗?”

      2) 授权意味着“你应该能够做你想做的事吗?”。

      这也在下图中进行了描述。

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

      【讨论】:

        【解决方案9】:

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

        其他人已经很好地描述了身份验证和授权的含义。这里有一个简单的规则可以帮助将两者清晰分开:

        • 身份验证enti验证您的身份entity(或真实性,如果您愿意的话)
        • 授权验证您的作者身份,即您有权访问并可能更改某些内容。

        【讨论】:

          【解决方案10】:

          定义

          身份验证 - 你就是你声称的那个人吗?

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

          示例

          网络应用使用Google Sign-In。用户成功登录后,Google 会发回:

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

          另外:

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

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

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

          【讨论】:

          • 这是一个涵盖技术方面的内容丰富的答案。谢谢!
          【解决方案11】:

          Authentication是一个验证过程:

          • 系统中的用户身份(用户名、登录名、电话号码、电子邮件...)通过提供证明(密钥、生物识别、短信...)。多重身份验证作为扩展。
          • 使用digital signature[About]检查电子邮件
          • 校验和

          AuthorizationAuthentication 之后的下一步。它是关于资源的权限/角色/特权。 OAuth(开放授权)是授权的一个例子

          【讨论】:

            【解决方案12】:

            我发现this article 的类比对我很有帮助。

            假设有人走到一扇上锁的门前照顾宠物 当家人外出度假时。那个人需要:

            • 身份验证采用密钥的形式。门上的锁只允许使用正确钥匙的人以几乎相同的方式进入 系统只向拥有正确权限的用户授予访问权限 凭据。
            • 授权是权限的形式。进入后,此人有权进入厨房并打开橱柜 持有宠物食品。 此人可能无权进入 卧室打个盹

            简而言之,身份验证是关于用户身份的,而授权是关于用户权限的。

            【讨论】:

              【解决方案13】:

              假设您已注册参加一个技术会议。您到达并走到外面的登记台前领取您的会议徽章。您必须首先出示某种形式的身份证明,例如驾驶执照。您的驾驶执照可以识别您(例如,带有您的照片),并由受信任的实体(DMV)分发。这是身份验证

              此人将您的徽章递给您,徽章是红色、蓝色或绿色。在会议内部走来走去,一些展品是彩色编码的。使用绿色徽章,您可以进入绿色展品,但不能进入蓝色或红色展品。徽章不是由 DMV 分发的,而是由会议本身分发的,用于访问会议厅内的会议资源。

              徽章上不一定有任何可以识别您的信息(它可能印有您的名字,但您可以轻松借用朋友的蓝色徽章来参观蓝色展览 - 没有人会检查您的姓名,只是蓝色)。徽章的颜色使您可以访问展品。这是授权

              【讨论】:

                【解决方案14】:

                身份验证是识别有效用户的过程。

                授权是验证用户访问级别的过程。

                应用示例 用户 AB 都是 Inventory 应用程序的身份验证用户。 两个用户都可以访问 Stock,但 B 对问题项目有更多的授权。

                【讨论】:

                  【解决方案15】:
                    Authentication Authorization
                  What does it do? Verifies credentials Grants or denies permissions
                  How does it work? Through passwords, biometrics, one-time pins, or apps Through settings maintained by security teams
                  Is it visible to the user? Yes No
                  It is changeable by the user? Partially No
                  How does data move? Through ID tokens Through access tokens

                  更多详细答案请参考:https://www.okta.com/identity-101/authentication-vs-authorization/

                  【讨论】:

                    【解决方案16】:

                    身份验证是验证实体身份的过程。例如

                    • 网络服务器每次都要求用户输入登录名/密码,以验证创建帐户的用户是现在访问它的用户。

                    授权是允许每个实体获得所需数量的服务/资源的过程。例如

                    • 在博客网站(例如medium.com)上,用户可以创建一个帐户并撰写帖子并发布。用户也可以阅读其他人发布的所有帖子。在这里,博客服务器首先使用用户登录凭据(登录名/密码)对用户进行身份验证,然后授权读取所有其他帖子并写入/修改仅由用户创建的帖子。服务器使用授权来限制每个用户可以修改的所有帖子。
                    • 用户可以创建一个免费的谷歌账户,谷歌服务器通过该账户提供邮件、日历、聊天、驱动器等免费服务。但为免费用户提供的所有这些服务的存储空间为 15GB(截至目前)。用户可以向谷歌服务器支付月费或年费以增加存储空间。在这里,谷歌服务器授权每个经过身份验证的用户限制资源使用量。

                    在当今的互联网中,授权被广泛用于对客户端应用访问限制。

                    【讨论】:

                      猜你喜欢
                      • 2016-02-15
                      • 2014-02-23
                      • 2012-03-25
                      • 2011-03-12
                      • 1970-01-01
                      • 2019-12-23
                      • 2017-05-28
                      • 1970-01-01
                      相关资源
                      最近更新 更多