文档章节

OAuth2.0深入理解

o
 osc_0ub8pn17
发布于 2019/03/13 09:29
字数 1277
阅读 7
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

1. OAuth2.0深入理解

1.1. 概念

  1. OAuth(Open Authorization)开放授权,表示将系统功能部分授权给第三方系统调用,实现更细颗粒度的权限控制
  2. OAuth是一种在线授权或者现场授权;IAM服务是一种预先授权或者离线授权
  3. 通俗的将,OAuth协议的用途,比如我要用在线打印服务来打印网盘里的照片,一般做法有两种,一是从网盘下下来,上传到在线打印服务;二是把网盘账号密码告诉在线打印服务,由在线打印服务去做下载上传的操作。这两种做法一是太麻烦,二是不安全,OAuth就是为了这种情况设计的,将网盘的下载权限授权给在线打印,就可以完成此操作

1.2. 组成

1.2.1. 协议参与者

  1. OAuth的参与实体至少有如下三个:
  • RO (resource owner): 资源所有者,对资源具有授权能力的人。如上文中的用户Alice。
  • RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求。如Google资源服务器,它所保管的资源就是用户Alice的照片。
  • Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源。如网易印像服务。
  1. 为了支持开放授权功能以及更好地描述开放授权协议,OAuth引入了第四个参与实体:
  • AS (authorization server): 授权服务器,它认证RO的身份,为RO提供授权审批流程,并最终颁发授权令牌(Access Token)。读者请注意,为了便于协议的描述,这里只是在逻辑上把AS与RS区分开来;在物理上,AS与RS的功能可以由同一个服务器来提供服务

1.2.2. 授权类型

  1. OAuth为了支持这些不同类型的第三方应用,提出了多种授权类型,如授权码 (Authorization Code Grant)、隐式授权 (Implicit Grant)、RO凭证授权 (Resource Owner Password Credentials Grant)、Client凭证授权 (Client Credentials Grant)。其中最核心、最难理解、也是最广泛使用的一种授权类型——“授权码”

1.2.3. 基本思路

  1. 协议的基本流程如下:

    (1) Client请求RO的授权,请求中一般包含:要访问的资源路径,操作类型,Client的身份等信息。

    (2) RO批准授权,并将“授权证据”发送给Client。至于RO如何批准,这个是协议之外的事情。典型的做法是,AS提供授权审批界面,让RO显式批准。这个可以参考下一节实例化分析中的描述。

    (3) Client向AS请求“访问令牌(Access Token)”。此时,Client需向AS提供RO的“授权证据”,以及Client自己身份的凭证。

    (4) AS验证通过后,向Client返回“访问令牌”。访问令牌也有多种类型,若为bearer类型,那么谁持有访问令牌,谁就能访问资源。

    (5) Client携带“访问令牌”访问RS上的资源。在令牌的有效期内,Client可以多次携带令牌去访问资源。

    (6) RS验证令牌的有效性,比如是否伪造、是否越权、是否过期,验证通过后,才能提供服务。

1.2.4. 授权码类型的开放授权

  1. 授权码类型的开放授权协议流程描述如下:

    (1) Client初始化协议的执行流程。首先通过HTTP 302来重定向RO用户代理到AS。Client在redirect_uri中应包含如下参数:client_id, scope (描述被访问的资源), redirect_uri (即Client的URI), state (用于抵制CSRF攻击). 此外,请求中还可以包含access_type和approval_prompt参数。当approval_prompt=force时,AS将提供交互页面,要求RO必须显式地批准(或拒绝)Client的此次请求。如果没有approval_prompt参数,则默认为RO批准此次请求。当access_type=offline时,AS将在颁发access_token时,同时还会颁发一个refresh_token。因为access_token的有效期较短(如3600秒),为了优化协议执行流程,offline方式将允许Client直接持refresh_token来换取一个新的access_token。

    (2) AS认证RO身份,并提供页面供RO决定是否批准或拒绝Client的此次请求(当approval_prompt=force时)。

    (3) 若请求被批准,AS使用步骤(1)中Client提供的redirect_uri重定向RO用户代理到Client。redirect_uri须包含authorization_code,以及步骤1中Client提供的state。若请求被拒绝,AS将通过redirect_uri返回相应的错误信息。

    (4) Client拿authorization_code去访问AS以交换所需的access_token。Client请求信息中应包含用于认证Client身份所需的认证数据,以及上一步请求authorization_code时所用的redirect_uri。

    (5) AS在收到authorization_code时需要验证Client的身份,并验证收到的redirect_uri与第3步请求authorization_code时所使用的redirect_uri相匹配。如果验证通过,AS将返回access_token,以及refresh_token(若access_type=offline)。

1.3. 误解

1.4. 授权服务器

1.5. Spring Security OAuth2

1.6. 扩展

  1. spring social 对接新浪,微信,qq
上一篇: sqlzoo练习题答案
下一篇: Logistic回归
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
6
SmartGWT学习整理 2、理解核心中的核心DataSource

SmartGWT学习整理 2、理解核心中的核心DataSource DataSource之所以重要,是因为它负责所有的与服务器的数据交互,几乎所有的控件都离不开它。 可以这样说,理解了DataSource就掌握了SmartGW...

st97
2010/11/16
2K
2
【分享】Cocos2dx工具之Cocostudio界面编辑器二

(作者:forward)在《【Cocos2dx工具——Cocostudio界面编辑器】一》博客结束的时候,Forward提出两个问题——1、有了编辑好的UI界面之后,我们如何把它们加载到程序中去呢?2、如何使对应的...

桑莱特
2013/06/05
4.2K
3
理解Swift中Optional类型-有和无的哲学

原文连接:http://blog.barat.cc/ios/understanding-swift-optional/ nil的遗憾 当某个变量或表达式没有任何内容时,在Objective-C中可以使用来表示。在Objective-C中是一个「野孩子」,voi...

巴拉迪维
2015/11/19
1.8K
9

没有更多内容

加载失败,请刷新页面

加载更多

重拾Java反射(为什么?)

前言:如标题所述,为什么要重拾Java反射?究其缘由,在Java中反射具有举足轻重的地位,一直以来都是Java中的闪亮点,并且反射是一系列出众的web框架设计的灵魂所在。PS:本文主要是理论,篇...

Umizhang
2019/06/07
0
0
删除文本文件中包含特定字符串的行 - Delete lines in a text file that contain a specific string

问题: 我将如何使用sed删除文本文件中包含特定字符串的所有行? 解决方案: 参考一: https://stackoom.com/question/MhaH/删除文本文件中包含特定字符串的行 参考二: https://oldbug.net...

富含淀粉
14分钟前
0
0
巧用 Matplotlib 动画,让你的 Python 可视化大放异彩

— 1 — 前言 如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看。第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了。 这篇文章虽然不是篇典型的数...

Python大数据分析
05/19
9
0
如何追班花?贝叶斯公式来帮忙

0 1 条件概率 在某个美丽的校园里,小扎喜欢上了班花小美,暗恋了很久终于想鼓起勇气追小美。 但是小扎知道自己长得不帅,不是富二代,成绩也不是很好,追小美这件事,小扎在心里估算了下,成...

zhanyd
01/12
0
0
Docker中级篇|深入探究Docker

简介: 深入探究Docker Docker镜像理解 Docker镜像是什么 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代...

一肥仔
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部