Spring Security OAuth笔记
因为工作需要,系统权限安全方面可能要用到Spring Security OAuth2.0,所以,近几天了解了一下OAuth相关的东西。目前好像还没有系统的学习资料,学习主要是通过博客,内容都是大同小异而且讲述的比较乱,可能还掺杂了一些个人不够全面的理解,所以有必要的话后面还得自己查看源码。
本来说写个demo先用起来试试,但是在用的时候遇到了一些问题暂时还没找到原因,因为Spring Security OAuth是基于Spring Security的,可能得去看一下Security的内容才能解决这些问题,所以这篇博客只是简单记录一下近几天学习到的内容。
网上普遍都用了一个“云冲印”的例子来说明OAuth的应用场景,就是第三方登录,比如在某个网站使用QQ登录、微博登录、微信登录等都属于OAuth的体现,就是让该网站获取账号的一些数据或者执行一些操作,但是不泄露账号密码等重要信息来保证账号安全。OAuth2授权已然是互联网开放平台的统一标配。除了第三方登录,还通常应用在微服务架构中各服务间的调用,保证服务间的安全性。
OAuth推荐可以看看这篇博客:理解OAuth 2.0
OAuth2.0分为两个部分:
- 1、认证服务器 Authorization Service
认证服务器负责对客户端进行认证授权,为客户端颁发令牌(token),OAuth2.0提供了4种授权模式。客户端必须得到用户的授权,才能获得令牌,OAuth2.0还提供了刷新令牌的功能。
- 2、资源服务器 Resource Service
资源服务器提供了一些受token令牌保护的资源,资源服务器通过对token进行验证来判断是否允许客户端的访问操作。
一、在项目中使用需要添加以下maven依赖:
二、配置认证服务器
配置认证服务器需要重写AuthorizationServerConfigurerAdapter中的配置方法,用 @EnableAuthorizationServer 注解来配置OAuth2.0 授权服务机制,重写用@Bean注解的几个configure方法一起来配置这个授权服务。包括以下3个配置项:
- ClientDetailsServiceConfigurer:用来配置客户端详情(ClientDetailsService),客户端详情信息在这里进行初始化,可以使用内存或者JDBC来存储调取详情信息。
它是AuthorizationServerConfigurer 的一个回调配置项,配置时有以下几个重要的属性:
clientId:(必须的)用来标识客户的Id。
secret:(需要值得信任的客户端)客户端安全码,如果有的话。
scope:用来限制客户端的访问范围,如果为空(默认)的话,那么客户端拥有全部的访问范围。
authorizedGrantTypes:此客户端可以使用的授权类型,默认为空。
authorities:此客户端可以使用的权限(基于Spring Security authorities)。
- AuthorizationServerSecurityConfigurer:用来配置令牌端点(Token Endpoint)的安全约束。
- AuthorizationServerEndpointsConfigurer:用来配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token services)。
这个配置对象是AuthorizationServerConfigurer的一个回调配置项,有一个叫做 pathMapping() 的方法用来配置端点URL链接,它有两个参数:
第一个参数:这个端点URL的默认链接(String)。
第二个参数:你要进行替代的URL链接(String)。
框架的默认URL链接如下列表,可以作为这个 pathMapping() 方法的第一个参数:
/oauth/authorize:授权端点,这个URL应该被Spring Security保护起来只供授权用户访问。
/oauth/token:令牌端点。
/oauth/confirm_access:用户确认授权提交端点。
/oauth/error:授权服务错误信息端点。
/oauth/check_token:用于资源服务访问的令牌解析端点。
/oauth/token_key:提供公有密匙的端点,如果你使用JWT令牌的话。
二、配置资源服务器
配置资源服务器必须通过 @EnableResourceServer 注解到一个 @Configuration 配置类上,并且必须使用 ResourceServerConfigurer 这个配置对象来进行配置,(这里选择继承自 ResourceServerConfigurerAdapter 然后重写其中的方法,参数就是这个对象的实例),@EnableResourceServer 注解自动增加了一个类型为 OAuth2AuthenticationProcessingFilter 的过滤器链。下面是一些可以配置的属性:
tokenServices:ResourceServerTokenServices 类的实例,用来实现令牌服务。
resourceId:这个资源服务的ID,这个属性是可选的,但是推荐设置并在授权服务中进行验证。
其他的拓展属性:例如 tokenExtractor 令牌提取器用来提取请求中的令牌。
请求匹配器:用来设置需要进行保护的资源路径,默认的情况下是受保护资源服务的全部路径。
受保护资源的访问规则:默认的规则是简单的身份验证(plain authenticated)。
其他的自定义权限保护规则:通过 HttpSecurity 来进行配置。
因为Spring Security OAuth是基于Spring Security的,所以还需要配置Spring Security。到目前为止,配置还是存在一些问题的,初步认为是和Spring Security有关,所以这部分配置后面弄清楚了再说。
Spring Security OAuth笔记的更多相关文章
- Spring Security OAuth 笔记
1 单点登录 关于单点登录的原理,我觉得下面这位老哥讲的比较清楚,有兴趣可以看一下,下面我把其中的重点在此做个笔记总结 https://juejin.cn/post/6844904079274197 ...
- Spring Security + OAuth系统环境搭建(一)
最近在做权限管理系统的重构工作,系统基于Spring Security + OAuth架构,整体架构.技术和之前调研的结果差不多,架构调研时有在这篇博客做过简单记录“Spring Cloud微服务下的 ...
- SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能
在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...
- SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证
整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...
- Spring Security OAuth 2.0
续·前一篇<OAuth 2.0> OAuth 2.0 Provider 实现 在OAuth 2.0中,provider角色事实上是把授权服务和资源服务分开,有时候它们也可能在同一个应用中, ...
- Spring Security OAuth 2开发者指南译
Spring Security OAuth 2开发者指南译 介绍 这是用户指南的支持OAuth 2.0.对于OAuth 1.0,一切都是不同的,所以看到它的用户指南. 本用户指南分为两部分,第一部分为 ...
- 【微服务】 数据库案例理解Spring Security OAuth
突然被问,你是做技术的怎么不走技术路线呢?是啊~仔细想想至今做了这么多年的技术,研发过的系统&产品五花八门,涉及到的领域各行各业:政府.军队.公安.国安.石油&石化.金融.教育.华为等 ...
- Spring Security OAuth 格式化 token 输出
个性化token 背景 上一篇文章<Spring Security OAuth 个性化token(一)>有提到,oauth2.0 接口默认返回的报文格式如下: { "ac ...
- Spring Security OAuth正式终止维护,已从官网下架
Spring Security团队正式宣布Spring Security OAuth终止维护. 目前官网的主页已经高亮提醒彻底停止维护. 旧的Spring Security OAuth项目终止到2.5 ...
随机推荐
- 开启FIPS协议
Open the 'Run' menu by pressing the combination 'Windows Key + R'.Type 'secpol.msc' and press 'Enter ...
- 记一次SQL性能优化,查询时间从4000ms优化到200ms.
以下这句SQL是从PLM中获取代办工作流的.没优化前SQL语句执行一次大概4000ms(4秒). select ch.change_number changeNumber, f.text change ...
- ubuntu中运行java程序
查找jdk rivsidn@rivsidn:~/demo/java$ sudo apt-cache search jdk default-jdk - Standard Java or Java com ...
- Spring MVC 上传和下载文件
上传文件 Commons FileUpload 元件 Servlet 3.0 本地文件上传特性 HTML 5 下载文件
- Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类
一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...
- android studio 将自己的项目生成jar包
很多情况下我们开发的项目不是一个完整的app,而是完成一部分功能,供别人的app使用的情况.这时就需要将我们的项目打包生成jar或者arr库文件,让别人的app导入我们的jar包,就能直接使用我们项目 ...
- xbeePROS1发送的数据在802.15.4网络中有多大时延?
完整的计算过程请参考Digi官方网站的文章:Sending data through an 802.15.4 network latency timing. Digi的S1模块可以跑802.15.4固 ...
- mybatis 插入数据 在没有commit时 获取主键id
<insert id="insert" parameterType="Mail" useGeneratedKeys="true" ...
- MYSQL性能查看(多指标)
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...
- python_requests随笔
#coding=utf-8 import requests url = "http://oj.jxust.edu.cn" #如果需要持续的链接,可以使用里面的Session方法(保 ...