本人经过2周的学习,成功搭建了认证服务器,资源服务器和客户端 。下面是本人对 oauth2的理解,以及spring-security的使用,如果理解错误的地方,还望指正。

现在代码有点凌乱,过段时间会放到github上面的,本人会在代码中添加详细注释,供学习交流使用

源码地址:

https://gitee.com/qq75547276/spring-security-oauth2

理解

1.认证服务器

  如抖音可以选择QQ或者微信登录,此时QQ或者微信就是认证服务器

  1.认证::用户认证和客户端认证,只要用户或者客户端在认证服务器中注册即可

  2.授权:通过认证之后赋予权限,

  服务器认证成功后,会返回token, token中携带用户信息,用户拥有的角色信息,客户端信息

  对于QQ,微信登录会返回一个openId,这个暂时不讲, 自己搭建的认证服务器暂时没有openId,后期有时间再去研究

2.资源服务器

  提供服务的服务器,如获取用户信息,用户头像等,需要携带token请求获取想要的信息(资源服务器会解析token,判断是否有权限)

  

3.客户端

  如抖音,知否,需要通过认证服务器(QQ,微信)认证的应用服务器。

  客户端通过认证拿到token,就可以访问资源服务器了

那么第三方客户端是如何完成授权的呢?

 解读4中授权模式 :

  1.授权码模式:推荐使用的授权模式,流程如下,下面给予解析

    

    解析:

    *****  client_id为客户端Id,必须注册到认证服务器, redirect_uri 这个地址后面获取到code要跳转的地方,也就是这个地址能拿到认证服务器返回的code  ****

    1.比如我现在要选择登陆csdn,打开登录页面,我们可以选择qq,微博,百度等 登录方式,

    2.我们选择第三方登陆,这时候浏览器会重定向http://localhost:8080/oauth/authorize?response_type=code&client_id=myclient_id&redirect_uri=http://baidu.com,不经过客户端;response_type=code为特定参数

    3.我们要携带这些参数response_type,client_id,redirect_uri 去认证,就会跳转到登录页面。client_id,redirect_uri  是你注册到认证服务器的信息

     4.我们填写登录信息并登录,然后跳转到让用户授权(授可以默认同意授权,也可以让用户自己在页面上确定)  

     5.认证并授权通过,重定向到redirect_uri 并带上code参数,如https://www.baidu.com/?code=o5NsTH,有人会问为什么不直接返回token? 这重定向要经过浏览器的,直接返回token是不安全的

     6.redirect_uri 为客户端中的一个rest接口,这样客户端就拿到token,并使用token和client_id,client_secret等换取token,grant_type=authorization为特定参数

    http://localhost:8080/oauth/token? grant_type=authorization_code &code=o4YrCS&client_id=pair &client_secret=secret&redirect_uri=http://baidu.com

    这个请求是在客户端中远程调用的,验证通过返回token

    7,拿到token后就可以访问资源服务器了,知道要访问的接口并把token带过去,这一步也是通过客户端远程调用的,http://localhost:8080/rest/api/getuserInfo?access_token=a4ae5a76-289d-2356-a421-9652sa857678

    下面是一个客户端通过第三方登录的简图    

     

  2.密码模式

  3.客户端模式

  4.简化模式

一个完整授权服务器 和资源服务器 简图

spring-security 理解 笔记 介绍以及使用(持续更新)的更多相关文章

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

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

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

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

  3. SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解

    用户认证流程 UsernamePasswordAuthenticationFilter 我们直接来看UsernamePasswordAuthenticationFilter类, public clas ...

  4. Spring Security学习笔记

    Spring Web Security是Java web开发领域的一个认证(Authentication)/授权(Authorisation)框架,基于Servlet技术,更确切的说是基于Servle ...

  5. Spring Security OAuth笔记

    因为工作需要,系统权限安全方面可能要用到Spring Security OAuth2.0,所以,近几天了解了一下OAuth相关的东西.目前好像还没有系统的学习资料,学习主要是通过博客,内容都是大同小异 ...

  6. Spring Security 与 OAuth2 介绍

    个人 OAuth2 全部文章 Spring Security 与 OAuth2(介绍):https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 ...

  7. Spring Security核心概念介绍

    Spring Security是一个强大的java应用安全管理库,特别适合用作后台管理系统.这个库涉及的模块和概念有一定的复杂度,而大家平时学习Spring的时候也不会涉及:这里基于官方的参考文档,把 ...

  8. Spring Security学习笔记(三)

    之前提到过认证后怎么存放用户信息,令牌token是一种方式,session是另一种方式,这里介绍使用spring session data redis存储httpSession. 添加了以上依赖后,我 ...

  9. Spring Security OAuth 笔记

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

  10. SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置

    官方文档参考,5.1.2 中文参考文档,4.1 中文参考文档,4.1 官方文档中文翻译与源码解读 SpringSecurity 核心功能: 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) ...

随机推荐

  1. caffe layer注册机制

    Caffe内部维护一个注册表用于查找特定Layer对应的工厂函数(Layer Factory的设计用到了设计模式里的工厂模式).Layer_factory的主要作用是负责Layer的注册,已经注册完事 ...

  2. executeFind(XXX) is undefined for the type hibernateTemplate(大概是这个错误吧)

    两句话,jar包版本不一样,类中包含的方法可能有改变. 出错时用的是spring5.x版本,但是没有找到我的api.(不记得放在那里了),所以换了spring的版本(换成了spring3.x).问题解 ...

  3. JSP页面通过c:forEach标签循环遍历List集合

    c:forEach>标签有如下属性: 属性 描述 是否必要 默认值items 要被循环的信息 否 无begin 开始的元素(0=第一个元素,1=第二个元素) 否 0end 最后一个元素(0=第一 ...

  4. STL 源码分析六大组件-allocator

    1. allocator 基本介绍 分配器(allocator))是C ++标准库的一个组件, 主要用来处理所有给定容器(vector,list,map等)内存的分配和释放.C ++标准库提供了默认使 ...

  5. SQL语句操作SQL SERVER数据库登录名、用户及权限

    要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, de ...

  6. selenium Select下拉框

    先来认识一下下拉框,以百度的“高级设置”为例 介绍两种方法来处理下拉框:使用click事件,使用Select方法 使用click事件 上述下拉框的源代码如下: 虽然我们可以在html源文件中看到sel ...

  7. Firefox--摄像头麦克风权限

    在自动化测试的过程中,可能会遇到来自浏览器的权限提示(摄像头.麦克风),今天,就讨论一下如何结局这个问题. 先来认识一下来自Firefox的权限提示,访问一个需要摄像头或者麦克风的网站 你可能觉得,一 ...

  8. redis:安装配置主从

    1.安装依赖包 yum install gcc gcc-c++ -y 2.下载安装包,解压 cd /usr/local/src/wget http://download.redis.io/releas ...

  9. web即时通信技术

    ajax jsonp polling setInterval定期发送ajax请求.服务器压力大,浪费流量,大部分是无效请求 ajax long polling ajax发起请求,服务器对于这个请求一直 ...

  10. 如何用纯 CSS 创作条形图,不用任何图表库

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/XqzGLp 可交互视频教 ...