Spring Security Oauth2 之 快速实现 验证码登录

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

目录

概况

登录流程

图片验证码校验

短信验证码校验

调用处理

总结


概况

网络上关于Spring Security  Oauth2 用户名密码登录的处理已经多的数不胜数了,关于它的用户名和验证码登录也说的比较多,但是在已经存在的系统上,实现用户名密码+验证码登录校验 或者是 用户名短信验证码+图片验证码快速校验,该怎么操作呐?oauth2的认证信息存放于内存服务器(Redis,Memchached)中的

登录流程

  • 从 principal 中获取 clientId, 进而装载 ClientDetails
  • 从 parameters 中获取 clientId、scope、grantType 以组装 TokenRequest
  • 校验 Client 信息。
  • 根据 grantType 设置 TokenRequest 的 scope。
  • 通过令牌授予者获取 Token
  • 最主要的获取token的方式为如下所示:

而用postman调用它,获取它的token的方式是:

由此可见,如果要继续使用 /oauth/token 方法来获取认证信息,那么就必须在此基础之上做改造。

图片验证码校验

图片验证码校验很好操作,在做获取 token的时候 ,校验图片验证码,校验成功之后,再去调用 /oauth/token 获得outh2的认证token

短信验证码校验

主要实现思路:是将短信发送的验证码,当做是密码来出来,在服务 UserDetailsService的  loadUserByUsername 方法实现上做处理-将短信验证码设置成用户的密码,并使用 PasswordEncoder 来做encode 加密设置。UserDetailsService 接口的具体实现方法如下:

登录的时候,就对登录方式做设置,明确告知后端是用的短信验证码登录还是密码登录,或者是其他什么方式来登录,均可以在此处设置,这样一来,就可以实现 Spring Security  Oauth2 认证。

调用处理

经上面改造之后,调用方式,将变为:新提供一个接口,里面使用 FeignClient 来调用 /oauth/token来认证,具体代码如下:

上面的 authClient.authLogin(xxx) 就是包装的调用 /oauth/token 的服务,把图片校验的操作在调用其他服务之前,已经做好 校验,继而在校验无误之后,再去实现验证操作。

总结

快速实现验证码(短信+图片)登录的主要操作有两步,一是要根据登录类型判断,如果是用户名密码登录,则走原来的登录方式,否则就根据类型,将验证码设置成密码,交于oauth2去做认证 。二包装 oauth2的认证接口 /oauth/token ,新写一个接口,在接口中去校验图片验证码是否输入正确,当图片验证码校验正确之后,再去调用/oauth/token 做认证。

当然其他的验证方式还有很多,这里主要是介绍如何在现有的框架之上,实现用户名密码+验证码登录校验 或者是 用户名短信验证码+图片验证码的快速校验。如果是新的项目,可以采用网上的方式进行校验.

猜你喜欢

转载自blog.csdn.net/supingemail/article/details/105767200