基于服务器Session的认证方式:

前边说的用户名密码登录、短信登录、第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式。登录信息都是存在服务器的session(服务器的一块内存)里 ,用户通过浏览器访问服务的时候,每一次服务器都会检查浏览器的cookie里有没有JESSIONID,如果不存在JESSIONID服务器会新建一个session,将新建的session的id写到浏览器的cookie里。服务器每次都会从请求里拿出JSESSIONID,然后去找对应的session,然后从session里拿出用户信息。

app、前后端分离

随着技术的发展,新的前端渠道app出现了,而且随着应用部署方式的改变,前后端分离现在也很流行,前后端分离模式下,html就是一种前端的资源,不在和应用服务器部署在一起了,而是单独部署在WebServer上,比如nodejs。前后端分离模式用户访问的是WebServer,由WebServer访问Application Server,WebServer处理ajax请求和渲染返回的数据。这种模式下,访问应用服务器的不再是用户了而是第三方的应用。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

明确一点,如果app和WebServer只要能处理cookie,这种模式还是可以用Cookie+Session认证方式的。但是存在问题:

1,开发繁琐:浏览器对cookie已经是内建好的,不需要我们针对cookie写太多代码。app而言,每次关闭再打开app,都需要实例化http客户端发请求,每次实例化http客户端cookie都是空的,需要自己去处理之前cookie存的数据。

2,安全性和客户体验差:cookie 没有特别的校验,JSESSIONID如果被泄露,放在cookie窃取到用户信息。如果通过缩短cookie有效时间解决这个问题,就会出现用户不断登录的情况

3,有些前端技术不支持cookie如微信小程序

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

令牌的方式处理认证信息的存储

发给用户一个令牌token,用户每次访问都拿着令牌,来判断用户登录信息权限等,token表现形式就是一个字符串。这样上边说的三个问题就可以解决了,token 不是通过cookie来携带的,而是http请求的参数,在请求头或者普通的参数都行;基于session的JESSIONID是服务器自己生成的,校验也是他自己校验,但是token的生成、校验我们可以自己控制,可以在token上加技术手段来增强安全性,可以实现token 刷新的方式而不会出现用户重复登录,缩短token有效时间增强安全性还保证了用户体验。

用令牌的方式在应用服务器和其他应用之间的认证和授权。这就很自然的联系到了OAuth协议了。OAuth协议就是用token的方式来做认证授权的:

前后端分离模式下使用OAuth2协议的结构

应用服务器--------------------相当于-------->服务提供商(如第三方登录的微信服务器)

APP、WebServer----------相当于-------->第三方应用  

Spring Security OAuth 简介:

Spring Social 实际上是封装了第三方应用(Client)所要做的大多数事情,拿着Spring Social可以很快开发一个第三方应用来连接想要连接的服务提供商,而Spring Security OAuth和Spring Social 正好相反,Spring Security OAuth 封装了服务提供商的大部分行为,用来快速搭建服务提供商的程序,发放令牌、校验令牌。

要实现服务提供商,其实就是要实现两个服务器 :认证服务器、资源服务器

认证服务器:

  实现四种授权模式:来确认用户身份以及拥有的权限。Spring Security OAuth 里已实现了四种授权模式

  token的生成和存储:根据信息生成令牌token,资源服务器根据token拿资源。OAuth协议没有规定token的具体生成方式,Spring Security OAuth 提供了默认的实现。

资源服务器:

  保护资源,在我们的场景,资源就是Rest 服务。Spring Security 是一系列的过滤器链,Spring Security OAuth就是加了个OAuth2AuthenticationFilter的过滤器,从请求中拿出来发出去的token,根据配置的存储策略从存储里根据token拿出用户信息,根据用户信息是否存在、是否有权限等来判断是否能访问要访问的 服务。

自己实现服务提供商:

要处理的问题是,我们不希望用户走标准的四种授权模式的,如手机号+短信验证码登录方式和标准四种授权模式是对应不上的。我们需要做的是让自定义的认证方式可以嫁接到认证服务器上,让用户通过自己的认证方式也可以调用token 生成的机制生成token发给第三方应用,第三方应用存储这个token ,每次访问服务带上这个token 经过过滤器链上的过滤器通过认证、授权来访问服务。

1,实现一个标准的OAuth2协议中Provider(服务提供商:认证服务器、资源服务器)角色的主要功能

2,重构之前的认证方式,使其支持token

3,自定义 token的生成方式

  

Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架的更多相关文章

  1. Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录

    基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...

  2. Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式

    SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...

  3. Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理

    token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...

  4. Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理

    token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframe ...

  5. Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商

    实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码  认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...

  6. Spring Security构建Rest服务-1203-Spring Security OAuth开发APP认证框架之短信验证码登录

    浏览器模式下验证码存储策略 浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验. APP模式下验证码存储策略 在app场景下里是没有cookie信息 ...

  7. Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议

    OAuth协议简介 OAuth协议要解决的问题    OAuth协议中的各种角色 OAuth协议运行流程 OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访 ...

  8. Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理

    OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...

  9. Spring Security构建Rest服务-0900-rememberMe记住我

    Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...

随机推荐

  1. ssh到远程执行命令并返回

    假设有三台机器 host1,host2,host3,host1能免密登录其他两台.要在第一台的机器里面写一个脚本分别删除每台机器的/root/test.txt rm -rf /root/test.tx ...

  2. BZOJ 1011 [HNOI2008]遥远的行星 (误差分析)

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 4974  Solved ...

  3. 挂载镜像SD卡的FAT32文件系统分区到Linux中

    首先使用fdisk –l命令查看sd卡的分区息 可以看到,sd卡有三个分区,第一个分区是FAT32系统,主要存放内核img文件和dtb文件,第二个分区是Linux系统分区,第三个分区格式未知,实际是U ...

  4. POJ2676 – Sudoku(数独)—DFS

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24081   Accepted: 11242   Specia ...

  5. zookeeper集群崩溃处理

    今天在私有化项目中遇到如下问题: 1.客户反馈用户登录返回303 2.登录服务器查看是大量的log将服务器磁盘空间占用殆尽,导致所有服务进程仍旧存在但是监听端口失败,服务不可用 3.清理日志文件 4. ...

  6. Argument list too long error for rm, cp, mv commands

    Another option is to use find's -delete flag: find . -name "*.pdf" -delete

  7. Elasticsearch、Kibana Windows下环境搭建

    Elasticsearch 簡介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是 ...

  8. WPF选择文件、文件夹和另存为对话框

    WPF提供了选择文件对话框,但并没有提供选择文件夹的对话框. OpenFileDialog类存在于PresentationFramework.dll程序集. public string SelectF ...

  9. MyCat - 背景篇(1)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. SQL与NoSQL 目前,对于互联网海量数据的存储以及处理,按使用场景,分为OLTP(联机事务处理,比如即时 ...

  10. Docker之存储管理

    本文由作者邹珍珍授权网易云社区发布. 本文主要介绍Docker的存储管理.Docker拥有镜像分层,写时复制机制以及内容寻址存储等特征,为了支持这些特征,Docker设计了一套镜像元数据管理机制来管理 ...