基于JWT的验证

JWT

本文将会详细介绍Spring Boot中集成Spring Security并基于JWT进行用户权限验证的案例,下图(图片源自 bezkoder.com/spring-boot-jwt-authentication)显示了我们如何实现用户注册、用户登录和授权的流程:

请求与响应交互流程

如果客户端访问受保护的资源,必须在HTTP授权头中添加一个合法的JWT。你可以通过下图来了解我们的Spring Boot Server

Spring Boot Server

  • WebSecurityConfigurerAdapter是我们安全实现的核心。它提供了HttpSecurity配置来配置cors、csrf、会话管理、受保护资源的规则。我们也可以扩展和定制默认的配置,它包含下面的元素。
  • UserDetailsService接口有一个通过用户名加载User的方法,并返回一个UserDetails对象,Spring Security可以用来进行认证和验证。
  • UserDetails包含必要的信息(如:用户名、密码、权限)来构建一个认证对象。
  • UsernamePasswordAuthenticationToken从登录请求中获取{用户名,密码}AuthenticationManager将使用它来验证登录账户。
  • AuthenticationManager有一个DaoAuthenticationProvider(在UserDetailsServicePasswordEncoder的帮助下)来验证UsernamePasswordAuthenticationToken对象。如果成功,AuthenticationManager返回一个完全填充的Authentication对象(包括授权
  • OncePerRequestFilter对我们的API的每个请求进行一次执行。它提供了一个doFilterInternal()方法,我们将实现解析和验证JWT,加载User详情(使用UserDetailsService,检查Authorizaion(使用UsernamePasswordAuthenticationToken
  • AuthenticationEntryPoint将捕获认证错误。

Links