Java 中的身份验证和授权

2024年9月10日 | 阅读 6 分钟

什么是认证?

认证是验证用户提供的凭据是否与系统中存储的凭据匹配的过程,以证明用户就是他们声称的那个人。如果凭据匹配,则授予访问权限。如果不匹配,则拒绝访问。

认证方法

单因素认证

这通常用于低风险系统的认证过程。您只需要一个因素即可进行身份验证,最常见的是密码,因此它更容易受到网络钓鱼攻击和键盘记录器的攻击。

双因素认证

这种方法更安全,因为它包含两个认证因素——通常是我们知道的东西,例如用户名和密码,再加上我们拥有的东西,例如手机短信或安全令牌。

对于双因素认证,我们将输入发送到我们设备的单次短信密码,或者可能是链接的身份验证器应用程序代码,并提供一个不断变化的访问代码。

正如我们可以想象的那样,这比仅输入密码或单个身份验证凭据安全得多。我们需要知道登录凭据,同时还要能够访问物理设备以进行第二部分。

近年来,双因素认证已成为在线服务的普遍做法,许多大型公司都将其作为默认的认证方法。许多公司要求我们设置双因素认证才能使用该服务。

多因素认证

为了使我们的认证过程更加安全,我们还需要 3 个或更多的因素。这种形式的认证通常基于以下原理:

  • 我们知道的东西(用户名+密码或用户名+安全问题和答案)
  • 我们拥有的东西(手机短信、身份验证器应用、USB 密钥)
  • 我们是什么(例如指纹/面部识别)

出于这些原因,多因素认证提供了最大的保护,因为我们需要攻破多个因素,而这些因素很难被“黑客攻击”或复制。

这种认证方法的缺点,以及它不被许多普通系统使用原因,是它可能设置和维护起来很麻烦。因此,您所保护的数据/系统确实需要证明这种安全性的必要性。

什么是授权?

授权是根据应用程序设置的特定标准和条件,验证您是否被允许访问应用程序的某个区域或执行特定操作的过程。您也可能将其称为访问控制或权限控制。

常见的授权方法

用户通过身份验证后,将应用授权控制,以确保用户能够根据组织授予的权限访问他们需要的数据并执行特定功能,例如添加或删除信息。这些权限可以在应用程序、操作系统或基础架构级别分配。两种常见的授权技术包括:

基于角色的访问控制 (RBAC)

这种授权方法根据用户在组织中的角色来授予用户信息访问权限。例如,公司内的所有员工都可以查看,但不能修改,他们的个人信息,如工资、休假时间和 401K 数据。但人力资源 (HR) 经理可能被授予访问所有员工 HR 信息的权限,并能够添加、删除和更改这些数据。通过为每个人的角色分配权限,组织可以确保每位用户都具有生产力,同时限制对敏感信息的访问。

基于属性的访问控制 (ABAC)

ABAC 使用一系列特定属性,比 RBAC 以更细粒度的方式授予用户权限。这可能包括用户属性,例如用户的姓名、角色、组织、ID 和安全级别。它可能包括环境属性,例如访问时间、数据位置和当前组织威胁级别。它还可能包括资源属性,例如资源所有者、文件名和数据敏感性级别。ABAC 比 RBAC 更复杂的授权过程,旨在进一步限制访问。例如,与其允许组织中的所有 HR 经理更改员工的 HR 数据,不如将访问限制在特定的地理位置或一天中的特定时间,以维持严格的安全限制。

如何实现授权?

实现授权的方式有很多,具体取决于我们使用的框架。

例如,在 .NET 框架内,您可以使用基于角色的访问控制或基于声明的访问控制。

基于角色的访问控制的核心思想是,您系统中的每个用户都被分配了一个角色。这些角色具有与之关联的预定义权限。获得某个角色意味着该用户将自动继承所有这些权限。角色在用户创建和设置时分配。

端点或站点然后简单地检查当前登录用户在尝试访问管理员区域时是否具有管理员角色。

这种方法的缺点是,有时用户会被授予过多他们不需要或不应该拥有的权限。

例如,授予用户管理员角色可能意味着他们已被授予高级的创建、编辑、删除和查看用户权限。而您可能只想授予他们查看和基本创建权限。

基于声明的访问控制可以实现对特定用户权限的更精细调整。应用程序可以检查声明是否存在于用户身上,或者声明是否分配了特定值。

例如,可以向用户授予一个名为 CreateUser 的声明,并在创建用户时进行检查。或者,您可以为同一个声明分配“高级”值,然后根据值是“高级”还是“基本”来提供不同的操作和用户界面。

认证与授权的区别

认证授权
在认证过程中,会检查用户的身份,以便向系统提供访问权限。而在授权过程中,会检查人员或用户的权限,以访问资源。
在认证过程中,会验证用户或人员。而在本过程中,会验证用户或人员。
它在授权过程之前完成。而此过程在认证过程之后完成。
通常需要用户的登录详细信息。而它需要用户的特权或安全级别。
认证决定了该人是否是用户。而它决定了用户拥有什么权限?
通常,通过 ID Token 传输信息。通常,通过 Access Token 传输信息。
OpenID Connect (OIDC) 协议是一个身份验证协议,通常负责用户身份验证过程。OAuth 2.0 协议管理用户授权过程的整体系统。
流行的认证技术 -
  • 基于密码的认证
  • 无密码认证
  • 2FA/MFA(双因素认证 / 多因素认证)
  • 单点登录 (SSO)
  • 社交认证
流行的授权技术 -
  • 基于角色的访问控制 (RBAC)
  • JSON Web Token (JWT) 授权
  • SAML 授权
  • OpenID 授权
  • OAuth 2.0 授权
用户可以根据需要随时更改认证凭据。用户无法更改授权权限,因为这些权限由系统所有者授予,并且只有他/她才能更改。
用户认证在用户端可见。用户授权在用户端不可见。
用户认证通过用户名、密码、面部识别、视网膜扫描、指纹等来识别。用户授权是通过使用预定义角色的访问权限来完成的。
示例:通过验证身份,员工可以访问包含其个人工资信息、休假时间和 401K 数据的 (HR) 人力资源应用程序。示例:一旦其访问级别获得授权,员工和 HR 经理就可以根据组织设定的权限访问不同级别的数据。

结论

正如我们所见,虽然认证和授权非常不同,但它们都在应用程序或系统的安全和完整性方面发挥着不可或缺的作用。

这些过程是相辅相成的,没有其中一个,另一个就变得毫无意义。如果我们能够进入管理员区域,但一旦进入就可以为所欲为,这可能会导致大问题。

另一方面,如果我们不知道人们是谁,我们就无法授权个人!这就是为什么认证总是发生在授权之前的原因。