基于spring-security-oauth2实现oauth2

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

内容简介:文章代码地址:该系列分为两个部分:分为内存实现,数据库实现。其中数据库实现采用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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

程序设计方法(中文版)

程序设计方法(中文版)

Matthias Fellisen / 黄林鹏、朱崇恺 / 人民邮电出版社 / 2003-12 / 49.00元

《程序设计方法》以Scheme语言为基础介绍计算和程序设计的一般理论和实践。《程序设计方法》由8个部分和7个独立的章节(第8、13、18、24、29、33、38章)组成。8个部分主要讨论程序设计,独立章节则介绍一些与程序设计和计算相关的话题。《程序设计方法》第1至第3部分介绍了基于数据驱动的程序设计基础。第4部分介绍了程序设计中的抽象问题。第5部分和第6部分是与递归及累积相关的内容。《程序设计方法......一起来看看 《程序设计方法(中文版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具