基于spring-security-oauth2实现oauth2(持续更新)

栏目: Java · 发布时间: 7年前

内容简介:文章代码地址:该系列分为两个部分:分为内存实现,数据库实现。其中数据库实现采用RBAC权限角色管理。首先声明oauth2是一种协议规范,spring-security-oauth2是对他的一种实现。其次,还有shiro实现,自己根据规范编写代码的实现方式。主流的qq,微信等第三方授权登录方式都是基于oauth2实现的。

基于spring-security-oauth2实现oauth2

文章代码地址: 链接描述 可以下载直接运行,基于springboot2.1.5,springcloud Greenwich版本实现

该系列分为两个部分:分为内存实现,数据库实现。其中数据库实现采用RBAC权限角色管理。

首先声明oauth2是一种协议规范,spring-security-oauth2是对他的一种实现。其次,还有shiro实现,自己根据规范编写代码的实现方式。主流的qq,微信等第三方授权登录方式都是基于oauth2实现的。

oauth2的认证方式有授权码,简单,账户密码,客户端等方式,具体请自行百度不做过多的阐述。 本文基于授权码方式实现

oauth生态设计的范围很大,可以说是一种解决方案,它有“第三方客户端(web服务,APP服务)”、“用户”、“认证服务器”、“资源服务器”等部分。认证流程如下图:

基于spring-security-oauth2实现oauth2(持续更新)

(A)用户打开客户端以后,客户端要求用户给予授权。

(B)用户同意给予客户端授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

好了,简单介绍后,现在开始实现基于内存的认证服务编写:

(1)使用idea在nacos-test项目中创建authserver-memory模块。

目录如下图:

基于spring-security-oauth2实现oauth2(持续更新)

(2)创建好module之后,我们开始配置pom文件加载依赖。

注意:springcloud的版本1.x和2.x差别很大,有很多不兼容,例如jpa1.x的findOne方法在2.x版本中不能使用。因为我们需要先配置依赖管理

基于spring-security-oauth2实现oauth2(持续更新)

我把spring-cloud-Alibaba一起配置了。好了,现在添加oauth2的依赖,因为我们使用springcloud,并且springcloud-security为我们封装好了oauth2,

因次我们只添加这个依赖就可以

基于spring-security-oauth2实现oauth2(持续更新)

(3)依赖添加完成,下面我们开始写代码,创建config包,因为,我们认证之前需要先校验用户的账户密码是否正确,所以我们先配置WebSecurityConfig拦截:

基于spring-security-oauth2实现oauth2(持续更新)

在config方法里,我们在内存中,配置了两个用户,这里注意密码用了BCryptPasswordEncoder进行加密,在springboot2.x中不加密会报错的。

(4)到这里,用户验证已经完成,我们创建AuthConfig配置认证拦截处理:

基于spring-security-oauth2实现oauth2(持续更新)

需要添加 @EnableAuthorizationServer注解开启认证服务,注入加密用的BCryptPasswordEncoder实例。然后,配置需要认证的客户端,

这里需要细说一下,首先是client_id代表是哪个客户端也就是哪个APP或者web服务需要认证的,然后是客户端的secret秘钥需要加密,

authorizedGrantTypes授权方式指的是授权码,简单,客户端,账户密码等,这里使用的是授权码(authorization_code),然后是scopes范围,

redirectUris重定向地址,就是你的登录地址,授权后跳转的地址。

(5)配置application.properties文件:

基于spring-security-oauth2实现oauth2(持续更新)

很简单,不在多说,现在,我们启动应用:

基于spring-security-oauth2实现oauth2(持续更新)

成功,我们用这个地址进行授权访问:

http://localhost :9000/oauth/authorize?client_id=client&response_type=code

成功后,跳转到登录页面:

基于spring-security-oauth2实现oauth2(持续更新)

输入账户:admin 密码: 123456 点登录

基于spring-security-oauth2实现oauth2(持续更新)

选择approve点击Authorize认证

基于spring-security-oauth2实现oauth2(持续更新)

这个code就是授权码

我们打开postman用post方式获取access_token

基于spring-security-oauth2实现oauth2(持续更新)

这个client就是配置的client_id,secret就是配置的secret,返回access_token

ok,基于内存的oauth2实现完成,下一篇基于数据库的实现。有问题请留言。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具