Spring Security深入浅出--4、Spring Social简介以及OAuth运行流程及开发QQ登陆(上)

目录

 

使用Spring Social开发第三方登陆

OAuth协议简介

OAuth运行流程

授权模式

Spring Social简介

开发QQ登陆


使用Spring Social开发第三方登陆

OAuth协议简介

以前的逻辑是通过微信用户密码登陆,获取微信的用户数据,但是这种方式存在的数据泄露的危险。

由于本来该软件中本身就是只需要用户的登陆数据,但是通过密码登陆获取额外的数据。所以不安全。

所以不是将用户密码交给微信端,而是将一个令牌交过去。

OAuth运行流程

授权模式

授权码模式(web系统认证)

密码模式(app系统认证使用)

客户端模、简化模式(使用较少)

Spring Social简介

简单来说,在第六步获取到用户信息之后,根据用户信息构建Authentication并放入SecurityContext里面,SecurityContext在源码分析的时候应该已经了解了,它的作用就是讲认证成功的Authentication保存到session里面。

在spring security框架中,就是增加了一个SocialAuthenticationFilter类来拦截处理第三方请求。

 具体的逻辑实现:连接第三方的类是connection,里面实现的serviceProvider中主要是两个接口OAuth2Operations(连接第三方),Api(AbstractOAuth2ApiBinding)用来适配获取的数据。在通过ApiAdapter适配对应的DB数据

开发QQ登陆

创建需要的接口

以下都是右边核心代码(ServiceProvider)

 以上都是应用商需要的代码

开始编写中间的代码

现在还需要将数据保存到数据库当中,也就是最左边的数据库那块

在数据库中创建userconnection表

 表的前缀添加“mxl_”,也就是说数据库那边的表前面加了该前缀就必须写没加就不设置该属性

 接下来如何将上面的userid转换成用户信息呢

在之前的UserDetailsService中,用来验证用户的密码是否正确,然后就认证的数据放入到session里面

 而第三方认证这里也同样的原理,提供了SocialUserDetailsService

首先解释一下loadUserByUsername()方法,处理的是表单传进来的数据

而loadUserByUserId()方法是第三方登陆的时候用的,传进来的是通过第三方传进来的userId

该方法返回的SocialUserDetails就是UserDetails的实现

 创建QQProperties类

 

 

在连接类那里我们需要使用到这三个参数

只有imooc.security.social.qq.app-id配置了该配置项才会生效

 

在qq互联里面查看

添加social过滤器

添加到配置中

页面修改

所有的/auth请求都会被SocialAuthenticationFilter拦截

/qq中的qq就是传入的providerid的值

这个时候登陆还是有问题的

发布了472 篇原创文章 · 获赞 97 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/qq_37909508/article/details/104068800