在上一篇文章中,您学习了如何在基于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