Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议
OAuth协议简介
OAuth协议要解决的问题
OAuth协议中的各种角色
OAuth协议运行流程
OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访问我的某些资源,不包括密码等关键信息,最常见的就是第三方登录,如qq登录,微信登录,第三方应用可以访问我们的用户名头像等一些基本信息。
在这里举个例子来说明

比如说你有一个应用,微信助手,可以美化你微信上自拍的照片,这对双方都是有利的,可以快速扩展第三方应用的用户量,这个应用如果想要获取到你微信上的照片,就需要微信授权。
常见的就是微信给你账户和密码,你就能获取到微信的自拍照了,但是这是有问题的:
1,应用可以访问用户在微信上的所有的数据
2,用户只有修改密码,才能收回授权
3,密码泄露的可能性大大提高
OAuth协议就是为了解决这样的问题而生的:
1,用户名/密码-->令牌,令牌的权限是有限的,它只能访问你的微信自拍数据
2,令牌是有有效期的

OAuth协议主要角色
Provider:服务提供商,提供令牌。相当于例子中的微信。
Resources Owner:资源所有者,就是用户,用户拥有自拍照资源。
Client:第三方应用,例子中的微信助手。
Authentication Server:认证服务器,认证用户的身份,并产生令牌。
Resource Server:资源服务器,作用1,存放用户资源,就是例子中的自拍数据,;2,验证令牌。 (认证服务器和资源服务器在物理上可以是一台服务器)
OAuth协议运行流程:

1,用户访问第三方应用
2,第三方应用请求用户授权
3,用户同意授权,第三方应用就会访问服务提供商的认证服务器(如访问微信的服务器,告诉他用户已同意访问自拍数据),问他要一个令牌
4,认证服务器看是不是用户真的同意了,如果是,会发一个令牌给第三方应用
5, 第三方应用就拿着令牌去访问资源服务器去申请获取资源
6,资源服务器会验证获取资源请求的令牌,验证通过,会把申请的资源开发给用户
第二步同意授权是关键,OAuth定义了四种授权模式
授权码模式(authentication code):授权码模式是功能最完整,流程最严密的授权模式。互联网所有服务提供商qq微信淘宝百度微博...都是这种
密码模式(resource ownowner password credentials):app用
简化模式(implicit):用得少
客户端模式(client credcredentials):用得少
授权码模式:

1,用户访问客户端
2,如果第三方应用客户端需要用户授权,会将用户导向认证服务器,用户同意授权这个动作会在认证服务器上完成
3,如果用户同意授权,认证服务器会将第三方应用重新导回到第三方应用一个指定的URL,并携带一个授权码(还不是令牌token)
4,第三方应用拿到授权码再去认证服务器申请令牌(在第三方应用的服务端完成,对用户不可见)
5,认证服务器会核对授权码是不是第三步发回去的,如果是,给客户端发放令牌token
因为这个过程中会产生授权码,其他的授权模式没有,所以叫授权码模式。
主要特点:用户同意授权的动作在认证服务器上完成的,认证服务器可以肯定用户授权的真假。
而其他的密码模式、客户端模式同意授权是在第三方应用上完成的,完成以后第三方应用向认证服务器申请令牌的时候带着一些信息说用户同意我了 ,存在的问题就是认证服务器不知道用户是否真的同意授权了,可能是第三方应用伪造的。
授权码模式要求第三方应用必须有一个服务器,有些网站只有静态页,就可以使用简化模式。
Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议的更多相关文章
- Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理
OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...
- Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架
基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...
- Spring Security构建Rest服务-0102-Spring Social开发第三方登录之qq登录
图一 基于SpringSocial实现qq登录,要走一个OAuth流程,拿到服务提供商qq返回的用户信息. 由上篇介绍的可知,用户信息被封装在了Connection里,所以最终要拿到Connectio ...
- 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服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商
实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码 认证服务器: 新建 ImoocAuthenticationServerConfig 类,@Ena ...
- Spring Security构建Rest服务-0900-rememberMe记住我
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...
- Spring Security构建Rest服务-1401-权限表达式
Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...
- Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理
token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...
随机推荐
- DatePickerDialog TimePickerDialog
MainActivity.java public class MainActivity extends Activity { @Override public ...
- Google Maps 基础
创建一个简单的 Google 地图 现在让我们创建一个简单的 Google 地图. 以下是显示了英国伦敦的 Google 地图: <!DOCTYPE html> <html> ...
- Airplace平台
Demo: 左上角:(0, 0)开始导航,手机终端上实时在地图上当前所在显示,当前点以绿色点显示,轨迹点以红色显示. 系统架构:基于移动手机的以网络为辅助的架构.特点:低头顶交流,用户隐私和安全 &g ...
- "请求被中止: 未能创建 SSL/TLS 安全通道"解决办法
1.安装证书: 手动双击证书安装,过程略 2.分配权限: 在控制台中找到安装的证书,右键选择“管理私钥”, 添加自己需要的权限,如果在测试可以直接添加Everyone 3.修改代码:public st ...
- android免root hook框架legend
一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...
- Bug中的中的小问题编程需要注意
Bug中的中的小问题编程需要注意 1. 关于局部变量与全局变量是否同名问题 如果参数传递的是一个数组,且全局变量与参数数据同名,则局部变量作用域中,这两个同名的数据可能会引起冲突. 如下:如果一开始是 ...
- 基于MATLAB的RGB转YCBCR色彩空间转换
使用MATLAB进行图片的处理十分方便,看它的名字就知道了,矩阵实验室(matrix laboratory).一副图片的像素数据可以看成是一个二维数组一个大矩阵,MTABLAB就是为矩阵运算而生. M ...
- 二:nodejs+express+redis+bootstrap table+jquery UI
介绍:做一个量化投资的实时系统. 综合: 添加记录,顺序改变的话,refresh之后,能正常刷新吗?可以正常刷新,只是顺序又变回去. express中用fs readfile 时,需要用path.jo ...
- 哈希连接(hash join) 原理
哈希连接(hashjoin) 访问次数:驱动表和被驱动表都只会访问0次或1次. 驱动表是否有顺序:有. 是否要排序:否. 应用场景: 1. 一个大表,一个小表的关联: ...
- 自定义cscope-index
目标: 1)生成索引文件时可以包含java文件: 2)cscope.in.out和cscope.po.out文件,加快cscope的索引速度 3)生成索引文件时,不搜索/usr/include目录 解 ...