.
目录
概况
登录流程
图片验证码校验
短信验证码校验
调用处理
总结
概况
网络上关于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 做认证。
当然其他的验证方式还有很多,这里主要是介绍如何在现有的框架之上,实现用户名密码+验证码登录校验 或者是 用户名短信验证码+图片验证码的快速校验。如果是新的项目,可以采用网上的方式进行校验.