Java 中的身份验证和授权2024年9月10日 | 阅读 6 分钟 什么是认证?认证是验证用户提供的凭据是否与系统中存储的凭据匹配的过程,以证明用户就是他们声称的那个人。如果凭据匹配,则授予访问权限。如果不匹配,则拒绝访问。 认证方法单因素认证 这通常用于低风险系统的认证过程。您只需要一个因素即可进行身份验证,最常见的是密码,因此它更容易受到网络钓鱼攻击和键盘记录器的攻击。 双因素认证 这种方法更安全,因为它包含两个认证因素——通常是我们知道的东西,例如用户名和密码,再加上我们拥有的东西,例如手机短信或安全令牌。 对于双因素认证,我们将输入发送到我们设备的单次短信密码,或者可能是链接的身份验证器应用程序代码,并提供一个不断变化的访问代码。 正如我们可以想象的那样,这比仅输入密码或单个身份验证凭据安全得多。我们需要知道登录凭据,同时还要能够访问物理设备以进行第二部分。 近年来,双因素认证已成为在线服务的普遍做法,许多大型公司都将其作为默认的认证方法。许多公司要求我们设置双因素认证才能使用该服务。 多因素认证 为了使我们的认证过程更加安全,我们还需要 3 个或更多的因素。这种形式的认证通常基于以下原理:
出于这些原因,多因素认证提供了最大的保护,因为我们需要攻破多个因素,而这些因素很难被“黑客攻击”或复制。 这种认证方法的缺点,以及它不被许多普通系统使用原因,是它可能设置和维护起来很麻烦。因此,您所保护的数据/系统确实需要证明这种安全性的必要性。 什么是授权?授权是根据应用程序设置的特定标准和条件,验证您是否被允许访问应用程序的某个区域或执行特定操作的过程。您也可能将其称为访问控制或权限控制。 常见的授权方法用户通过身份验证后,将应用授权控制,以确保用户能够根据组织授予的权限访问他们需要的数据并执行特定功能,例如添加或删除信息。这些权限可以在应用程序、操作系统或基础架构级别分配。两种常见的授权技术包括: 基于角色的访问控制 (RBAC) 这种授权方法根据用户在组织中的角色来授予用户信息访问权限。例如,公司内的所有员工都可以查看,但不能修改,他们的个人信息,如工资、休假时间和 401K 数据。但人力资源 (HR) 经理可能被授予访问所有员工 HR 信息的权限,并能够添加、删除和更改这些数据。通过为每个人的角色分配权限,组织可以确保每位用户都具有生产力,同时限制对敏感信息的访问。 基于属性的访问控制 (ABAC) ABAC 使用一系列特定属性,比 RBAC 以更细粒度的方式授予用户权限。这可能包括用户属性,例如用户的姓名、角色、组织、ID 和安全级别。它可能包括环境属性,例如访问时间、数据位置和当前组织威胁级别。它还可能包括资源属性,例如资源所有者、文件名和数据敏感性级别。ABAC 比 RBAC 更复杂的授权过程,旨在进一步限制访问。例如,与其允许组织中的所有 HR 经理更改员工的 HR 数据,不如将访问限制在特定的地理位置或一天中的特定时间,以维持严格的安全限制。 如何实现授权?实现授权的方式有很多,具体取决于我们使用的框架。 例如,在 .NET 框架内,您可以使用基于角色的访问控制或基于声明的访问控制。 基于角色的访问控制的核心思想是,您系统中的每个用户都被分配了一个角色。这些角色具有与之关联的预定义权限。获得某个角色意味着该用户将自动继承所有这些权限。角色在用户创建和设置时分配。 端点或站点然后简单地检查当前登录用户在尝试访问管理员区域时是否具有管理员角色。 这种方法的缺点是,有时用户会被授予过多他们不需要或不应该拥有的权限。 例如,授予用户管理员角色可能意味着他们已被授予高级的创建、编辑、删除和查看用户权限。而您可能只想授予他们查看和基本创建权限。 基于声明的访问控制可以实现对特定用户权限的更精细调整。应用程序可以检查声明是否存在于用户身上,或者声明是否分配了特定值。 例如,可以向用户授予一个名为 CreateUser 的声明,并在创建用户时进行检查。或者,您可以为同一个声明分配“高级”值,然后根据值是“高级”还是“基本”来提供不同的操作和用户界面。 认证与授权的区别
结论正如我们所见,虽然认证和授权非常不同,但它们都在应用程序或系统的安全和完整性方面发挥着不可或缺的作用。 这些过程是相辅相成的,没有其中一个,另一个就变得毫无意义。如果我们能够进入管理员区域,但一旦进入就可以为所欲为,这可能会导致大问题。 另一方面,如果我们不知道人们是谁,我们就无法授权个人!这就是为什么认证总是发生在授权之前的原因。 下一个主题Java 中的“找不到符号”错误 |
Java 是一种通用且广泛使用的编程语言,以其平台独立性而闻名,但与任何语言一样,编写良好且高效的代码对于出色的用户体验至关重要。无论我们是经验丰富的 Java 开发人员还是刚刚起步,都有许多方法可以...
阅读 3 分钟
我们可以通过 reverse()、split()、toLowerCase()、toUpperCase() 和 substring() 方法来反转字符串中每个单词的大小写。通过 split("\\s") 方法,我们可以将所有单词获取到一个数组中。要获取第一个字符,我们可以使用 substring() 或 charAt()...
阅读1分钟
在本节中,我们将学习什么是矩形数,并创建 Java 程序来检查给定的数字是否为矩形数。矩形数程序经常出现在 Java 编码面试和学术界。矩形数一个矩形数是……
阅读 3 分钟
Java 中找不到或无法加载主类错误 在 Java 编程语言中,经常会遇到错误和异常。但是,一些最流行和最常见的错误经常被初学者程序员遇到。在这些错误中,找不到...
5 分钟阅读
是一个 Bio-Format API。在 Java 中,BF 是一个 final 类,属于 loci.plugins.BF 包。它扩展了 Objects 类。因此,Object 类中的所有方法都继承到该类中。在本节中,我们将讨论 (Bio Format)...
阅读 2 分钟
在本节中,我们将创建一个 Java 程序并找到一个数的排列和循环排列。在继续本节之前,我们将首先通过示例理解排列。排列在数学中,排列是一种方法或技术,我们可以从中确定...
7 分钟阅读
在本文中,我们将介绍如何使用 Java Collections Framework 的 reverse() 函数来反转字符串。下面示例演示了使用 Collections.reverse() 来反转 Java 中的字符串。整个过程如下:使用 String.toCharArray 函数创建一个空...
阅读 4 分钟
在 Java 中,变量和常量是基本概念,在程序中管理和操作数据方面发挥着重要作用。在本节中,我们将探讨 Java 中变量和常量之间的主要区别。Java 中的变量变量是存储数据值的容器。它...
7 分钟阅读
Java 是一种强大的编程语言,以其多功能性和广泛的库而闻名。在处理数组时,您可能经常遇到需要计算两个数组之和的情况。无论您是初学者还是经验丰富的开发人员,理解如何完成此任务...
5 分钟阅读
异常处理是编程的一个重要方面,它使开发人员能够优雅地管理和从意外错误中恢复。在 Java 中,异常分为已检查异常和未检查异常,已检查异常要求在代码中进行显式处理。本文重点介绍 Java 中的已检查异常,提供了...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India