因为工作需要,系统权限安全方面可能要用到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. Python积累三:object() take no object!

    A,报错:object() take no object! 根因:代码书写级错误!!!!! 两个原因: 1. __init__ 左右都是2个下划线,这里自己没掉进去! 2.init写成int,不是in ...

  2. 在python学习时间过程中,你会不断发现需要解决的问题,更多需要连接未知,这时候到哪里去查阅资料呢?

    1.safari online book https://www.safaribooksonline.com 知乎上有人问,送程序员什么礼物好,其中一个答案就是safari online.编程的英文书 ...

  3. maven打包不包含配置文件[z]

    如果使用maven-jar-plugin和maven-dependency-plugin打包,排除配置文件的方法: 上面的配置是把resources下的配置文件不打进项目的jar包中,主要使用的是&l ...

  4. pip 国内源 配置

    pip 国内源 配置 2017年12月09日 16:05:20 阅读数:183 最近使用 pip 安装包,动辄十几 k 甚至几 k 的下载速度,确实让人安装的时候心情十分不好.所以还是要给 pip 换 ...

  5. linux debian 9 / centos 7配置postgresSQL数据库

    #读者注意:本文可以选择不看解释,直接执行每段的0中的代码 (〇):一些概念(可以跳过直接使用(一)0的代码) 1. 客户端:psql.postgreSQL的命令行客户端程序,在终端输入psql进入p ...

  6. 在Linux服务器上配置Transmission来离线下载BT种子

    Transmission简介 Transmission是一种BitTorrent客户端,特点是跨平台的后端和简洁的用户界面,硬件资源消耗极少,支持包括Linux.BSD.Solaris.Mac OS ...

  7. Webview窗口设置遮罩层

    在Webview窗口中如果存在子Webview的情况下,使用html中的css来做页面遮罩无法覆盖子Webview,为了解决此问题,WebviewStyle对象添加mask属性,用于设置Webview ...

  8. IOPLL动态重配

    连接 Avalon -MM接口 mgmt_waitrequest:当 PLL 重配置进程开始后,此端口变高并在 PLL 重配置期间保持高电平. PLL 重配置进程完成后,此端口变低. I/O PLL重 ...

  9. ScriptOJ-unique#89

    一般做法 const unique = (arr) => { const result = arr.reduce((acc, iter) => { if(acc.indexOf(iter) ...

  10. 2nd week

    <!DOCTYPE html> <html> <head> <title>用户登录.html</title> <meta http-e ...