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并请求基本身份验证时发生的情况的完整工作流程。 基本上是BasicAuthenticationFilterBasicAuthenticationEntryPoint一起完成大部分工作。

其他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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值