什么是 OAuth 2.0

根据 oauth.net 的描述,我们可以将它简述为以下内容:OAuth 2.0 是 OAuth 1.0 框架协议的升级版本,简化了多种平台上身份及授权认证的流程。

具体的文档可参考 RFC 6749 和 RFC 6750。

 OAuth 2.0 的用途

OAuth 2.0 的主要用途大概有以下几种:

  1. 账号接入:降低用户登录的成本、降低一定的账号风险
  2. 资源访问:以身份权限为手段保护资源处理的有效性、合法性和安全性

 OAuth 2.0 的一般流程

  1. 客户端(如 Web Service)因某些业务需要,以一定的方式向用户(即资源所有者) 请求授权
  2. 用户同意了授权请求,并给予客户端一定的“信物”(如授权码)
  3. 客户端用这个“信物”与授权服务器沟通,请求资源访问的权限
  4. 授权服务器验证该请求,发放资源访问令牌
  5. 客户端通过这个令牌,来试图向资源服务器访问某些资源
  6. 资源服务器验证令牌的有效性和权限范围,发放资源

 获得 OAuth 2.0 授权的模式(Grant Type)

获得 OAuth 2.0 的授权的模式主要有四种:

  1. 授权码授权(Authorization Code Grant):一般比较多的应用于 Web Server 或其他可以内置调用浏览器的应用,一般通过浏览器的不断重定向来具体实现整个认证授权过程。绝大多数授权平台都支持该方式
  2. 隐式授权(Implicit Grant):一般多用于桌面应用、手机应用。较授权码授权而言,安全性稍有下降,身份令牌有被他人截取的危险。
  3. 密码凭证授权(Resource Owner Password Credentials Grant)
  4. 客户端凭证授权(Client Credentials Grant)

当然,除了这四种主要的,还有一种 SAML Bearer 于今年 5月 通过 IETF RFC 7522 标准

 OAuth 2.0 访问令牌的种类(Token Type)

目前而言, OAuth 2.0 的令牌类型主要有两种:

  1. 不记名式(Bearer Token):一般都要实现这种
  2. 消息认证式(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 的简单理解的更多相关文章

  1. 简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析

    简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析 虽然经常用 OAuth 2.0,但是原理却不曾了解,印象里觉得很简单,请求跳来跳去,今天看完相关介绍,就来捋一捋 ...

  2. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  3. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  4. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  5. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  6. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  7. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  8. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  9. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

随机推荐

  1. Android--从相册中选取照片并返回结果

    启动系统相册去选择图片 //从相册中选取的方法 private void selectPhoto(){ Intent intent = new Intent(Intent.ACTION_PICK); ...

  2. Windows 10 IoT Core Samples

    Windows 10 IoT Core Samples Welcome to the Windows 10 IoT Core Samples These samples have been valid ...

  3. Tutorial: Analyzing sales data from Excel and an OData feed

    With Power BI Desktop, you can connect to all sorts of different data sources, then combine and shap ...

  4. Windows下使用Visual Studio Code搭建Go语言环境

    1.安装GO语言   下载地址:    https://golang.org/dl/   Windows下直接运行安装GO语言即可.     安装成功.   安装完毕GO语言后,需要添加GOPATH环 ...

  5. notepad++ erlang开发环境设置

    初学erlang 网上有使用eclipse的,有使用emacs的,尝试了一下, 感觉太麻烦,来试试notepad++吧. 有什么新使用方法会再更新上来,for you for me. 1.语法高亮: ...

  6. 读:HIS 与医保系统的接入方案及实现

    HIS 与医保系统的接入方案及实现刘剑锋 李刚荣第三军医大学西南医院信息科(重庆 400038) 医院HIS和医保系统的接口设计方案涉及两个部分,分别由医院和医保中心分别完成相,应的程序设计,这两部分 ...

  7. UISlider swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  8. 多线程 -- GCD

    GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 执行任务 同步方法: dispatch_sync dispatch_sync(dispatch_queue_t queue, dispa ...

  9. COS中访问文件的三种方式

    1.通过FID来访问文件(比如EF,DF) 2.通过SFI来访问文件(有些COS命令可以通过SFI来快速访问文件,而不需要事先选中文件) 3.通过文件名来访问文件(只能是DF文件)

  10. “我爱淘”冲刺阶段Scrum站立会议8

    完成任务: 今天最大的成功就是解决了昨天的问题,可以将xml文件的内容解析出来显示到软件中. 计划任务: 可以通过webservice将数据库中的内容解析出来,通过查询可以得到想要的内容. 遇到问题: ...