因为工作需要,系统权限安全方面可能要用到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有关,所以这部分配置后面弄清楚了再说。

转载于:https://www.cnblogs.com/Mr-XiaoLiu/p/9796240.html

Spring Security OAuth笔记相关推荐

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

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

  2. spring security oauth rce (cve-2016-4977) 漏洞分析

    0x00 漏洞概述 1.漏洞简介 Spring Security OAuth是为Spring框架提供安全认证支持的一个模块,在7月5日其维护者发布了这样一个升级公告,主要说明在用户使用Whitelab ...

  3. 单点登录(shiro与Spring Security OAuth 2.0的集成)

    单点登录(shiro与Spring Security OAuth 2.0的集成) shiro项目采用ruoyi,OAuth采用pig 若依:https://gitee.com/y_project/Ru ...

  4. Spring Security——OAuth 2.0 Client自动配置源代码分析

    基本概念 OAuth2.0:OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0(即完全废止了OAuth1.0). OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源 ...

  5. Spring Security——OAuth 2.0登录——Google,GitHub,Facebook和Okta

    基本概念 OAuth 2.0登录:OAuth 2.0登录功能为应用程序提供了使用户能够通过使用其在OAuth 2.0提供程序(例如GitHub)或OpenID Connect 1.0提供程序(例如Go ...

  6. java hipster!_通过Java Hipster升级Spring Security OAuth和JUnit测试

    java hipster! "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权 ...

  7. 通过Java Hipster升级Spring Security OAuth和JUnit测试

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 使用单元 ...

  8. 将JWT与Spring Security OAuth结合使用

    1.概述 在本教程中,我们将讨论如何使用Spring Security OAuth2实现来使用JSON Web令牌. 我们还将继续构建此OAuth系列的上一篇文章. 2. Maven配置 首先,我们需 ...

  9. 【Spring Security OAuth2笔记系列】- Spring Social第三方登录 - QQ登录下

    qq登录下 前面把所有的代码组件都弄好了.现在可以开启调试了 在这之前你需要有一个qq互联的应用:也就是为了拿到appid和appSecret:自己去qq互联创建一个应用即可 这里讲下本地怎么调试应用 ...

最新文章

  1. php 链接多个mysql_PHP同时操作多个MySQL连接
  2. 《剑指offer》-逐层打印二叉树
  3. histeq函数实现直方图的均衡化和规定化
  4. 播放视频一会,出错并自动关闭
  5. 机器学习之多变量线性回归(Linear Regression with multiple variables)
  6. MySQL INSERT:插入数据(添加数据)
  7. 【实验】广域网点到点协议PPP PAP CHAP的双向验证、单项认证
  8. 科大星云诗社动态20210418
  9. MyBatis从缓存查找数据的依据
  10. linux循环条件,shell脚本编写 之 条件选择,条件判断,循环语句
  11. 最近对latin-1这个字符集产生了不少好感
  12. CVPR 2019 论文大盘点-人脸技术篇
  13. 译: 6. 任务调度(定时执行任务)
  14. Hadoop学习之路(一)理论基础和逻辑思维
  15. 新版白话空间统计(2):空间自相关
  16. 安卓Aop 实现权限检测
  17. WPA无线密码破解利器EWSA/跑包软件
  18. NOIP2016排名(919~1419)
  19. 钉钉视频下载地瓜网络钉钉视频下载器
  20. 《基于Cortex-M4的虚拟机制作与测试》课程设计 结题报告

热门文章

  1. Ubuntu+PHP+Apache+Xdebug 使用方法
  2. OSPF:LSA Type-7 to Type-5 转发地址抑制(实验)
  3. Spring3, Hibernate3.6与Proxool连接池配置
  4. makefile中命令的显示
  5. python进阶:JSON与枚举
  6. 哎哟我去!betterzip居然支持这么多压缩格式!
  7. python import caffe失败的可能原因
  8. 使用Charles在iOS6上进行抓包
  9. 使用ExtJs创建新的UI控件(转)
  10. 代码解析深度学习系统编程模型:TensorFlow vs. CNTK