基于spring-security-oauth2实现oauth2

栏目: 后端 · 发布时间: 4年前

内容简介:文章代码地址:该系列分为两个部分:分为内存实现,数据库实现。其中数据库实现采用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实现完成,下一篇基于数据库的实现。有问题请留言。


以上所述就是小编给大家介绍的《基于spring-security-oauth2实现oauth2》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Distributed Systems

Distributed Systems

Sukumar Ghosh / Chapman and Hall/CRC / 2014-7-14 / USD 119.95

Distributed Systems: An Algorithmic Approach, Second Edition provides a balanced and straightforward treatment of the underlying theory and practical applications of distributed computing. As in the p......一起来看看 《Distributed Systems》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具