OAuth 2 的简单理解
什么是 OAuth 2.0
根据 oauth.net 的描述,我们可以将它简述为以下内容:OAuth 2.0 是 OAuth 1.0 框架协议的升级版本,简化了多种平台上身份及授权认证的流程。
OAuth 2.0 的用途
OAuth 2.0 的主要用途大概有以下几种:
- 账号接入:降低用户登录的成本、降低一定的账号风险
- 资源访问:以身份权限为手段保护资源处理的有效性、合法性和安全性
OAuth 2.0 的一般流程
- 客户端(如 Web Service)因某些业务需要,以一定的方式向用户(即资源所有者) 请求授权
- 用户同意了授权请求,并给予客户端一定的“信物”(如授权码)
- 客户端用这个“信物”与授权服务器沟通,请求资源访问的权限
- 授权服务器验证该请求,发放资源访问令牌
- 客户端通过这个令牌,来试图向资源服务器访问某些资源
- 资源服务器验证令牌的有效性和权限范围,发放资源
获得 OAuth 2.0 授权的模式(Grant Type)
获得 OAuth 2.0 的授权的模式主要有四种:
- 授权码授权(Authorization Code Grant):一般比较多的应用于 Web Server 或其他可以内置调用浏览器的应用,一般通过浏览器的不断重定向来具体实现整个认证授权过程。绝大多数授权平台都支持该方式
- 隐式授权(Implicit Grant):一般多用于桌面应用、手机应用。较授权码授权而言,安全性稍有下降,身份令牌有被他人截取的危险。
- 密码凭证授权(Resource Owner Password Credentials Grant)
- 客户端凭证授权(Client Credentials Grant)
当然,除了这四种主要的,还有一种 SAML Bearer 于今年 5月 通过 IETF RFC 7522 标准
OAuth 2.0 访问令牌的种类(Token Type)
目前而言, OAuth 2.0 的令牌类型主要有两种:
- 不记名式(Bearer Token):一般都要实现这种
- 消息认证式(Message Authentication Code Token)
不记名式令牌
不记名式的访问令牌一般是指不用做什么,客户端获得的令牌什么样,传给资源服务器时就是什么样。
访问资源时,通常有以下几种形式:
- 将令牌放在 请求头 Authorization 中,并命名为 Bearer。即 Authorization: Bearer ****(注意空格)。
- 以access_token=****形式放在 Query String 中,以 GET 方式访问
- 将access_token=****放在请求体中,以 application/x-www-form-urlencoded 形式(通常是 POST) 访问
消息认证式令牌
消息认证式的访问令牌通常是以一定的加密算法对一些参数加密。加密过程通常是将 HmacSHA1 和 HmacSHA256 加密后的结果Base64化,再根据一定的规则填充到请求头 Authorization 中,并将其命名为 MAC。如 Authorization: MAC id="h480djs93hd8",nonce="274312:dj83hs9s",mac="kDZvddkndxvhGRXZhvuDjEWhGeE=",具体规则视平台的不同而不同
更安全的 OAuth 2.0
虽然本身 OAuth 2.0 也是较为安全的,但难免会为了便利性,相对牺牲了部分安全性,有关 OAuth 2.0 的安全防护可参考 RFC 6819。
本文参考资料
译
OAuth 2 的简单理解的更多相关文章
- 简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析
简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析 虽然经常用 OAuth 2.0,但是原理却不曾了解,印象里觉得很简单,请求跳来跳去,今天看完相关介绍,就来捋一捋 ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
随机推荐
- linux之iptables总结
netfilter/iptables概述: netfilter/iptables是Linux内核防火墙架构,由netfilter实现功能,由iptables提供接口. iptables ...
- dev 激活没有权限问题
用管理员身份打开 Microsoft Visual Studio 2010-->Visual Studio Tools-->Visual Studio 命令提示(2010) 然后输入一下命 ...
- DXP中原理图与PCB图元件互找
在原理图中找到元件,快捷键TS即可在PCB中找到元件,且为选中状态.
- Ubuntu 12.04 Desktop配置XAMPP【转】
转载:[ubuntu][xampp]开发环境配置 XAMPP 并不适用于生产环境,而仅供开发环境使用.XAMPP 被设置为尽量开放,并提供开发者任何他/她想要的功能.这对于开发环境来说是很棒的,但对于 ...
- VS 与 SQLite数据库 连接
SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是不够用的.我们需要的sqlite3.lib文件并不在 ...
- iOS UIView的简单渐变效果
这里主要用到了ios4.0以后 UIView的类方法 animateWithDuration: 函数原型包括以下类方法 + (void)animateWithDuration:(NSTimeInter ...
- VBS数组函数学习实例分析
Array 函数 返回包含数组的Variant. Array(arglist) 参数:arglist是赋给包含在Variant中的数组元素的值的列表(用逗号分隔).如果没有指定此参数,则将会创建零长度 ...
- Phantom omini设备开发流程
最近在忙着做毕业设计,我的毕业设计是做力觉临场感的,所以在力反馈设备Phantom Omini,由于整个设备是国外的国内的资料很少,我是14年拿到这个设备的但是真的是在开发是在16年了,中间有很多事没 ...
- 查看JVM内存
你知道如何进行JVM内存查看,这里和大家分享几个JVM内存查看方法,希望对你的学习有所帮助,通常情况下可以用代码查看,也可以在eclipse中增添相关信息后直接查看. JVM内存查看方法 可以用代码查 ...
- 安装Symfony2
我就不明白这个框架明明很小就几M,为什么这么难下载. 他们为什么不把文件打包好?非要搞得这么复杂. 一开始我在Linux ubuntu下载没有成功 然后想在win10上试试 到www.apache.o ...