Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架
基于服务器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认证框架的更多相关文章
- Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...
- Spring Security构建Rest服务-1202-Spring Security OAuth开发APP认证框架之重构3种登录方式
SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oa ...
- Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理
token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...
- Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理
token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframe ...
- Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商
实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码 认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...
- Spring Security构建Rest服务-1203-Spring Security OAuth开发APP认证框架之短信验证码登录
浏览器模式下验证码存储策略 浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验. APP模式下验证码存储策略 在app场景下里是没有cookie信息 ...
- Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议
OAuth协议简介 OAuth协议要解决的问题 OAuth协议中的各种角色 OAuth协议运行流程 OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访 ...
- Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理
OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...
- Spring Security构建Rest服务-0900-rememberMe记住我
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...
随机推荐
- [转]谈谈 Mifare Classic 破解
Mifare Classic 提供 1 Kb - 4Kb 的容量,现在国内采用的多数是 Mifare Classic 1k(S50)[后面简称 M1 卡] M1 卡有从 0 到 15 共 16 个扇区 ...
- Spring MVC controller 被执行两次
interceptor 被执行两次 后来发现 时controller被执行两次 后来发现是jsp页面有个: <img src="#" > 导致被执行两次. 解决方案:去 ...
- 201709021工作日记--Volley源码解读(四)
接着volley源码(三)继续,本来是准备写在(三)后面的,但是博客园太垃圾了,写了半天居然没保存上,要不是公司这个博客还没被限制登陆,鬼才用这个...真是垃圾 继续解读RequestQueue的源码 ...
- hdu1081 To The Max 2016-09-11 10:06 29人阅读 评论(0) 收藏
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误
字符串换行导致的错误,确切的说是马虎的错误,自己在编写简单的servlet项目时,在StudentDao.java 中的 查询语句:String sql= "SELECT Type,fl ...
- DIN-A4 doublesided year calendar
% DIN-A4 doublesided year calendar % Author: Robert Krause % License : Creative Commons attribution ...
- queued frame 造成图形性能卡顿
曾经遇到过卡顿是类似的原因:当时对显卡底层知识理解不懂,看到引擎底层有一个MaxFramexxx的接口,实现是使用注册表修改显卡底层的注册信息,当时还是一个掉接口习惯的客户端码农的思维,没理解底层含义 ...
- 【笔记】virtualbox+arch+kde5安装流水账
正常安装就是RTFD就行了,不行辅助这几个链接也行: 我先把整个脚本[1]放这里: loadkeys us parted mkfs.ext4 /dev/sda1mkfs.ext4 /dev/sda3 ...
- CSS2.1SPEC:视觉格式化模型之包含块
原汁原味的才是最有味道的,在阅读CSS标准时对这一点的体会更加深刻了,阅读文档后的一大感觉就是很多看上去理所应当的样式表现也都有了对应的支持机制.本文首先从包含块写起,一方面总结标准中相应的阐述,并且 ...
- 如何做好iOS应用安全?这有一把行之有效的“三板斧”
本文由 网易云发布. iOS应用面临很多破解问题,常见的有IAP内购破解.山寨版本.破解版本等:大众应用上,微信抢红包.微信多开等:而在iOS游戏上,越来越泛滥的外挂问题也不断困扰着游戏厂商. 网易 ...