Http基本身份验证在Spring Security中如何工作?
在上一篇文章中,您学习了如何在基于Spring安全性的Java应用程序中启用Http基本身份验证 ,现在,我们将进一步进一步了解http基本身份验证在Spring安全性中的工作原理。 如果您还记得的话,当您使用HTTP Basic进行身份验证时,客户端(例如浏览器或其他客户端)会在http请求标头中发送登录凭据。 标头恰当地命名为"Authorization
”,它包含基于64的编码字符串,该字符串是通过使用冒号将用户名和密码连接起来而创建的,例如,如果用户名是"johnsmith"
而密码是"JOHN3214"
则它们将被连接为在使用base 64编码算法编码之前,先输入"johnsmith:JOHN3214"
。
服务器在接收到此类请求时,将提取"Authorization"
标头的值,并使用用于验证用户身份的相同算法Base64对该标头的内容进行解码。
如果您还记得的话,我们使用<http-basic>l;
在XML配置或httpBasic()
上方法HttpSecurity
目的是能够基本验证。
现在,让我们看一下Spring安全性如何确切地支持Http Basic身份验证,以及当它收到登录请求并在服务器端启用Http Basic身份验证时,事物如何在Spring安全性空间内移动。
Spring Security如何处理Http基本身份验证请求
当您使用<http-basic>l;
配置元素,Spring Security的BasicAuthenticationFitler
出现在图中,它基本上检查传入的HTTP请求是否包含"Authorization"
标头,并且其值以“ Basic”开头。
启动时还将BasicAuthenticationEntryPoint
策略配置到ExceptionTranslationFilter
中,该策略用于处理不包含“ Authorization”标头的请求。
当您从浏览器向受保护的URL(例如/admin/users
发出http请求而未添加“ Authorization
”标头时,Spring Security会抛出一个由ExceptionTranslationFilter
处理的拒绝访问的ExceptionTranslationFilter
。
然后,此过滤器将委派给AuthenticationEntryPoint
接口的特定实现策略 ,在本例中为BaicAuthenticationEntryPoint
。
此类在响应中添加标头“ WWW-Authenticate:Basic real =” Spring Security Application”,然后将401(未经授权)的HTTP状态代码发送给客户端(例如您的浏览器),该浏览器知道如何处理此代码并起作用相应地,即显示一个对话框,提示您输入用户名和密码,如下所示:
当您输入用户名和密码并提交请求时,请求再次遵循过滤器链,直到到达BasicAuthenticationFilter
为止。
此过滤器检查请求标头,以“ Basic
”开头的Authorization标头的位置,例如Authorization:Basic CDWhZGRpbjpvcGVuc2AzYW11。
然后, BaicAuthentictionFilter
提取“ Authorization
”标头的内容,并使用Base64算法解码登录凭据,以从解码的String中提取用户名和密码。
一旦有了该信息,过滤器就会创建一个UsernamePasswordAuthenticationToken
对象,并将其发送到身份验证管理器以标准方式进行身份验证。
如果您不知道AuthenticationManager
在Spring安全性登录中的作用,那么您可以在Eugen的Learn Spring Security课程中了解有关AuthenticationManager
更多信息。
身份验证管理器将要求身份验证提供程序(例如,在内存中,基于JDBC的备份或基于LDAP的身份验证程序)检索用户,然后使用它创建一个身份验证对象。 该过程是标准的,并且独立于将HTTP基本用于身份验证,例如也适用于摘要身份验证。
如果您使用的是RESTful Web服务,则还可以使用curl命令发送带有“授权”错误的HTTP请求,以进行HTTP基本身份验证。 我发现curl是通过从命令行发送各种HTTP命令来测试Web服务的简便方法。
您还可以在我的文章中看到如何测试RESTful Web服务,以找到一些curl的实际示例,例如发送发布请求,使用HTTP基本和摘要身份验证发送请求等。
顺便说一句,就像我之前说过的那样,基本身份验证并不安全,任何能够拦截请求的人都可以解码密码,因此它仅用于测试目的,而更复杂的摘要身份验证和OAuth用于实际应用中,特别是如果您想保护REST API。
在接下来的文章中,我将告诉您更多有关保护REST API的信息,但是如果您迫不及待,建议您使用Spring MasterClass来检阅REST,Spring MasterClass最近也针对Spring Framework 5和Spring Security 5进行了更新。
这就是Spring Security内部HTTP基本身份验证如何工作的全部内容。 您已经了解了HTTP请求命中受保护的URL并请求基本身份验证时发生的情况的完整工作流程。 基本上是BasicAuthenticationFilter
和BasicAuthenticationEntryPoint
一起完成大部分工作。
其他Spring Security教程和资源
学习Spring Security 4 Basic动手
Spring MVC中@RestController和@Controller之间的区别?
Spring中@RequestParam和@PathVaraible之间的区别?
3个在线课程,可以更好地学习Spring Security
Spring中@ Service,@ Component和@Controller之间的区别?
5门学习Spring Core,Spring MVC和Spring Boot的课程
Eugen Paraschiv的Spring安全认证课程
感谢您阅读本文,如果您喜欢我对Spring Security中Http Basic身份验证如何工作的解释,请与您的朋友和同事分享此文章。 如果您对反馈有任何疑问,请留下注释。
翻译自: https://www.javacodegeeks.com/2018/01/http-basic-authentication-works-spring-security.html
Http基本身份验证在Spring Security中如何工作?相关推荐
- 使用API身份验证的Spring Security
背景 尽管有许多博客文章详细介绍了如何使用Spring Security,但是当问题域位于标准LDAP或数据库身份验证之外时,我仍然经常发现配置挑战. 在本文中,我将介绍一些针对Spring Secu ...
- Spring Security中文文档
Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben A ...
- 如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证
在上一篇文章中,我向您展示了如何在Java应用程序中启用Spring安全性 ,今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 . 如 ...
- angular jwt_Angular5 JWT身份验证(Spring Boot安全性)
angular jwt 欢迎使用带有Spring Security的angular5 jwt身份验证.在本教程中,我们将在一个angular5单页应用程序中使用jwt身份验证创建一个全栈应用程序,该应 ...
- Angular5 JWT身份验证(Spring Boot安全性)
欢迎使用带有Spring Security的angular5 jwt身份验证.在本教程中,我们将在一个angular5单页应用程序中使用jwt身份验证创建一个完整的堆栈应用程序,该应用程序具有由spr ...
- Spring Security中的SecurityContext和SecurityContextHolder是什么?
SecurityContext和SecurityContextHolder是Spring Security的两个基本类. SecurityContext用于存储当前经过身份验证的用户的详细信息,也称为 ...
- Spring Security中HttpSecurity常用方法及说明
本文来说下spring security中HttpSecurity常用方法,这个类在spring security中使用的非常多,功能十分丰富,其中包含的方法也是非常多,在实际的开发中,需要重写里面的 ...
- 6.Spring security中的rememberMe
文章目录 *RememberMe* *6.1RememberMe简介* *6.2RememberMe基本用法* *6.3持久化令牌* *6.4二次校验* *6.5原理分析* *`AbstractRem ...
- Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析
一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...
最新文章
- 网工协议基础(4)TCP/UDP协议
- [Poj 1459] 网络流(一) {基本概念与算法}
- matlab朴素贝叶斯手写数字识别_TensorFlow手写数字识别(一)
- resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
- openstack rabbitmq
- jqurey操作radio总结
- codeforces George and Job
- 多线程中的互斥控制程序代码_Java中的并发——线程安全性
- python中的 __getattr__ __setattr__ __getitem__ __add__
- webapi 给自己挖的坑
- 14Penrose广义逆(II)
- 有限元编程示例matlab + C++
- Adobe 全家桶系列卸载工具
- 基于OpenCV实现视频的循环播放
- 异地驾驶证转入(+到期换证)——赞深圳交警!
- 删除电脑中删不掉的文件或文件夹
- 分享四个体验不错的云游戏平台—网易云游戏、腾讯云游戏、菜鸡云游戏、格莱云游戏
- 用这9个问题来审视自己
- android studio 官网下载+安装(win7)
- 对话任正非:华为是一家全球化公司
热门文章
- 37、JAVA_WEB开发基础之上传功能
- 汇编语言(二十二)之统计减去奇数的个数
- Java中“/”,“.”所代表的文件路径
- 2017派卧底去阿里、京东、美团、滴滴带回来的面试题
- 深度学习工具caffe详细安装指南
- Shell入门(十)之echo
- idea如何安装lombok
- 历年安徽省二计算机考试题库,2010安徽省计算机等级考试试题 二级ACCESS最新考试试题库...
- matlab 的excel 对象,MATLAB 中的 COM 对象
- Mybatis使用IN语句查询