认证(Authentication)是证实用户身份的过程,是为了解决 "Who are you?" 的问题,即在应用中谁能证实他就是他本人。使用特定系统时,身份验证是必不可少的机制。没有正确的身份验证就很难识别用户。在认证过程当中,通常须要认证者提供与他们身份信息相关的一些标识信息来代表他就是他本人,如提供身份证,用户名/密码来证实。html
阅读更多关于 Angular、TypeScript、Node.js/Java 、Spring 等技术文章,欢迎访问个人我的博客 —— 全栈修仙之路
例如,有一个发送方 A 经过互联网向接收方 B 发送电子文档。系统将如何识别发送方 A 已发送给接收方 B 的专用消息。入侵者 C 可能会拦截,修改和重播文档以欺骗或窃取此类攻击,这些信息被称为伪造。java
在给定状况下,身份验证机制可确保两件事:首先,它确保发送者和接收者都是合法的人,这就是所谓的数据来源身份验证。其次,它借助私密会话密钥确保了发送者和接收者之间已创建的链接的安全性,从而没法推断出该链接,这被称为对等实体身份验证。数据库
受权技术用于肯定授予已认证用户的权限。简而言之,它检查是否容许用户访问特定资源。受权发生在身份验证以后,在此以前先肯定用户的身份,而后经过查找存储在表和数据库中的条目来肯定用户的访问列表。安全
例如,用户 A 但愿访问服务器上特定的资源文件。首先用户 A 将向服务器发送请求,接收到用户 A 的请求以后,服务器会先验证用户 A 的身份。若用户 A 经过身份验证,以后服务器将找到用户 A 所具备的相应权限,判断用户 A 是否有访问所请求资源文件的权限。通常状况下,资源的访问权限能够包括查看,修改或删除等。服务器
(图片来源 —— https://www.ilantus.com/blog/...)ide
前面咱们已经介绍了认证和受权的定义,下面咱们来看一下它们之间的主要区别。学习
(图片来源 —— https://techdifferences.com/d...)spa
身份认证和受权是确保系统信息安全的两种机制。身份认证和受权之间的区别在于,身份认证是检查用户详细信息以识别其授予系统访问权限的过程,而受权则是检查通过身份验证的用户访问系统资源的特权或权限的过程。code
身份(Principal),即主体的标识属性,能够是任何东西,如用户名、邮箱等,惟一便可。一个主体能够有多个principal,但只有一个 Primary principal,通常是用户名/密码/手机号。htm
在 Spring Security 中,咱们能够将每一个 GrantedAuthority 视为一个单独的特权。好比 READ_AUTHORITY,WRITE_PRIVILEGE 甚至 CAN_EXECUTE_AS_ROOT。
当直接使用 GrantedAuthority 时,例如经过使用诸如 hasAuthority('READ_AUTHORITY')
之类的表达式,咱们将以细粒度的方式限制访问。
@Override protected void configure(HttpSecurity http) throws Exception { .antMatchers("/protectedbyauthority").hasAuthority("READ_PRIVILEGE") }
相似地,在 Spring Security 中,咱们能够将每一个 Role 视为一个粗粒度的 GrantedAuthority ,此种 GrantedAuthority 以 ROLE 为前缀的字符串表示。当直接使用 Role 时,可以使用 hasRole("ADMIN")
之类的表达式,咱们将以粗粒度方式限制访问。值得注意的是,默认的 "ROLE" 前缀是可配置的。
@Override protected void configure(HttpSecurity http) throws Exception { .antMatchers("/protectedbyrole").hasRole("USER") }