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

Http基本身份验证在Spring Security中如何工作?相关推荐

  1. 使用API​​身份验证的Spring Security

    背景 尽管有许多博客文章详细介绍了如何使用Spring Security,但是当问题域位于标准LDAP或数据库身份验证之外时,我仍然经常发现配置挑战. 在本文中,我将介绍一些针对Spring Secu ...

  2. Spring Security中文文档

    Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben A ...

  3. 如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证

    在上一篇文章中,我向您展示了如何在Java应用程序中启用Spring安全性 ,今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 . 如 ...

  4. angular jwt_Angular5 JWT身份验证(Spring Boot安全性)

    angular jwt 欢迎使用带有Spring Security的angular5 jwt身份验证.在本教程中,我们将在一个angular5单页应用程序中使用jwt身份验证创建一个全栈应用程序,该应 ...

  5. Angular5 JWT身份验证(Spring Boot安全性)

    欢迎使用带有Spring Security的angular5 jwt身份验证.在本教程中,我们将在一个angular5单页应用程序中使用jwt身份验证创建一个完整的堆栈应用程序,该应用程序具有由spr ...

  6. Spring Security中的SecurityContext和SecurityContextHolder是什么?

    SecurityContext和SecurityContextHolder是Spring Security的两个基本类. SecurityContext用于存储当前经过身份验证的用户的详细信息,也称为 ...

  7. Spring Security中HttpSecurity常用方法及说明

    本文来说下spring security中HttpSecurity常用方法,这个类在spring security中使用的非常多,功能十分丰富,其中包含的方法也是非常多,在实际的开发中,需要重写里面的 ...

  8. 6.Spring security中的rememberMe

    文章目录 *RememberMe* *6.1RememberMe简介* *6.2RememberMe基本用法* *6.3持久化令牌* *6.4二次校验* *6.5原理分析* *`AbstractRem ...

  9. Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析

    一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...

最新文章

  1. 网工协议基础(4)TCP/UDP协议
  2. [Poj 1459] 网络流(一) {基本概念与算法}
  3. matlab朴素贝叶斯手写数字识别_TensorFlow手写数字识别(一)
  4. resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
  5. openstack rabbitmq
  6. jqurey操作radio总结
  7. codeforces George and Job
  8. 多线程中的互斥控制程序代码_Java中的并发——线程安全性
  9. python中的 __getattr__ __setattr__ __getitem__ __add__
  10. webapi 给自己挖的坑
  11. 14Penrose广义逆(II)
  12. 有限元编程示例matlab + C++
  13. Adobe 全家桶系列卸载工具
  14. 基于OpenCV实现视频的循环播放
  15. 异地驾驶证转入(+到期换证)——赞深圳交警!
  16. 删除电脑中删不掉的文件或文件夹
  17. 分享四个体验不错的云游戏平台—网易云游戏、腾讯云游戏、菜鸡云游戏、格莱云游戏
  18. 用这9个问题来审视自己
  19. android studio 官网下载+安装(win7)
  20. 对话任正非:华为是一家全球化公司

热门文章

  1. 37、JAVA_WEB开发基础之上传功能
  2. 汇编语言(二十二)之统计减去奇数的个数
  3. Java中“/”,“.”所代表的文件路径
  4. 2017派卧底去阿里、京东、美团、滴滴带回来的面试题
  5. 深度学习工具caffe详细安装指南
  6. Shell入门(十)之echo
  7. idea如何安装lombok
  8. 历年安徽省二计算机考试题库,2010安徽省计算机等级考试试题 二级ACCESS最新考试试题库...
  9. matlab 的excel 对象,MATLAB 中的 COM 对象
  10. Mybatis使用IN语句查询