Bootstrap

SpringBoot集成oauth2(授权码模式)

同样基于密码模式的代码
先看完我的客户端模式和密码模式,服务跑起来了再看授权码模式

1. 验证服务器的配置类中改一点

在这里插入图片描述

2. security配置类改一点

在这里插入图片描述

        http.authorizeRequests()
                .anyRequest()
                .authenticated() //所有请求都需要通过认证
                .and()
                .httpBasic()     //Basic提交
                .and().csrf().disable()
                .formLogin()    //支持表单认证
                .permitAll();

资源服务器不变,到这已经配置好了

流程:
比如登录请求要认证,会拦截 oauth/authorize 这个端点,这个是请求授权码(code)的
我们的后端服务器A收到比如qq登录的请求
后端自动先把我们请求302跳转(导向)到验证服务器(同理就是qq的验证服务器)去请求 code

请求code
http://localhost:9930/oauth/authorize?response_type=code&client_id=admin3&redirect_uri=http://www.baidu.com&scope=all&state=normal

浏览器就会跳到这里
在这里插入图片描述
然后你输入这里写的用户名密码user1,123456在这里插入图片描述
你们看这一步是不是对应的qq登录页面啊
在这里插入图片描述
然后输入密码登录后,这就是授权页面啊对不对

QQ把登录和授权页写在一起了而已,只不过security框架分开了,它有自己的页面
其实我们也可以自定义页面的,可以百度下
这里显示是否授予admin3权限,点第一个按钮,同意授权
在这里插入图片描述
然后他就跳转到我们设定的百度页面来了,因为验证服务器的配置类中我们授权后设定了跳转到百度
在这里插入图片描述
在这里插入图片描述

这里可以写我们自己的后端服务接口,比如授权后跳到登录成功的首页

然后这时 code 咱们也有了
怎面看,它跳转到百度的时候,code会自动加在url后面的,还有state参数
如果你是拒绝授权,它会跳转但不会有code参数
在这里插入图片描述

这里拿到code了
前端再用code去请求验证服务器拿Token
http://localhost:9930/oauth/token?grant_type=authorization_code&code=e5crHP&client_id=admin3&client_secret=123456&redirect_uri=http://www.baidu.com
打开浏览器访问,就有Token了,注意:这个code请求过token一次,code下次就无效了
在这里插入图片描述
第二次请求Token,出现这个说明code失效了
在这里插入图片描述
我们就拿token访问资源服务器的资源
qq就是获取头像,获取个人信息这些

然后也可以用token获取刷新token(不需要code)
http://localhost:9930/oauth/tokengrant_type=refresh_token&refresh_token=xxx&client_id=admin3&client_secret=123456
在这里插入图片描述

这就是授权码模式了

;