因为工作需要,系统权限安全方面可能要用到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笔记的更多相关文章

  1. Spring Security OAuth 笔记

    1  单点登录 关于单点登录的原理,我觉得下面这位老哥讲的比较清楚,有兴趣可以看一下,下面我把其中的重点在此做个笔记总结 https://juejin.cn/post/6844904079274197 ...

  2. Spring Security + OAuth系统环境搭建(一)

    最近在做权限管理系统的重构工作,系统基于Spring Security + OAuth架构,整体架构.技术和之前调研的结果差不多,架构调研时有在这篇博客做过简单记录“Spring Cloud微服务下的 ...

  3. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  4. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  5. Spring Security OAuth 2.0

    续·前一篇<OAuth 2.0> OAuth 2.0 Provider 实现 在OAuth 2.0中,provider角色事实上是把授权服务和资源服务分开,有时候它们也可能在同一个应用中, ...

  6. Spring Security OAuth 2开发者指南译

    Spring Security OAuth 2开发者指南译 介绍 这是用户指南的支持OAuth 2.0.对于OAuth 1.0,一切都是不同的,所以看到它的用户指南. 本用户指南分为两部分,第一部分为 ...

  7. 【微服务】 数据库案例理解Spring Security OAuth

    突然被问,你是做技术的怎么不走技术路线呢?是啊~仔细想想至今做了这么多年的技术,研发过的系统&产品五花八门,涉及到的领域各行各业:政府.军队.公安.国安.石油&石化.金融.教育.华为等 ...

  8. Spring Security OAuth 格式化 token 输出

    个性化token 背景 上一篇文章<Spring Security OAuth 个性化token(一)>有提到,oauth2.0 接口默认返回的报文格式如下: {     "ac ...

  9. Spring Security OAuth正式终止维护,已从官网下架

    Spring Security团队正式宣布Spring Security OAuth终止维护. 目前官网的主页已经高亮提醒彻底停止维护. 旧的Spring Security OAuth项目终止到2.5 ...

随机推荐

  1. onload、onpageshow、onpagehide、onbeforeunload、onunload的谣言纠正及特点介绍

    谣言一.chrome不支持unload.onbeforeunload 为什么说不支持呢?因为你使用alert,confirm,promot用来测试是否可用了!在unload和onbeforeunloa ...

  2. java_16Arrays类

    1sort():对数组进行升序排列 public static void main(String[] args) { int[] arr= {2,43,6,7}; Arrays.sort(arr); ...

  3. java项目中VO和DTO以及Entity,各自是在什么情况下应用

    1.entity里的每一个字段,与数据库相对应, 2.dto里的每一个字段,是和你前台页面相对应, 3.VO,这是用来转换从entity到dto,或者从dto到entity的中间的东西.   举个例子 ...

  4. 解决 “access violation at address xxxxxxxxx”错误

    在进行磁盘整理的时候,打开Foxmail的时候出现了“access violation at address32383137”错误 和“access violation at address00000 ...

  5. HBase总结(十一)hbase Java API 介绍及使用示例

    几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  6. python 安装第三方包时 read timed out

    记录下安装python第三方包超时报错,解决方法:(以安装numpy为例) pip install numpy 报错:raise ReadTimeoutError(self._pool, None, ...

  7. POJ 1328 Radar Installation 贪心 A

    POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...

  8. tomcat 配置图片服务器

    在后台和前端交互时,遇到了后台存储的图片,前端根据地址无法访问,使用Tomcat搭建图片服务器 1.找到tomcat下的server.xml文件 2.配置文件下加入service节点(在原有的serv ...

  9. jquery print属性设置

    一,需求背景 项目中遇到打印功能,想实现完美的打印功能,对元素进行操作等,可以使用jquery print 插件. 二,依赖文件  git地址请戳这里 1,jquery 2,jquery.print- ...

  10. hdmi中深度色彩像素打包

    4个色彩像素包模式:24- 30- 36- 48- 不同模式下tmds时钟与与像素的比是位宽与24的比值 . 24 bit mode: TMDS clock = 1.0 x pixel clock ( ...