一、简介

不使用oauth2.0协议,资源所有者直接给需要使用资源的第三方应用共享凭据时,有这些问题:

  • 需要直接共享给第三方应用凭据
  • 需要服务器支持密码身份验证
  • 凭据的访问权限过大,失去对访问时间和范围的控制
  • 不能灵活撤销发出的凭据
  • 任何第三方都要共享凭据

oauth引入了授权层,分离了客户端和资源所有者的角色

客户端在请求资源时,被颁发的是另一套凭据

1、角色

oauth的四种角色:

  • 资源所有者
  • 资源服务器
  • 客户端
  • 授权服务器

授权服务器和资源服务器可以是同一台,授权服务器可以颁发被多个资源服务器接受的访问令牌

2、协议流程

  1. +--------+ +---------------+
  2. | |--(A)- Authorization Request ->| Resource |
  3. | | | Owner |
  4. | |<-(B)-- Authorization Grant ---| |
  5. | | +---------------+
  6. | |
  7. | | +---------------+
  8. | |--(C)-- Authorization Grant -->| Authorization |
  9. | Client | | Server |
  10. | |<-(D)----- Access Token -------| |
  11. | | +---------------+
  12. | |
  13. | | +---------------+
  14. | |--(E)----- Access Token ------>| Resource |
  15. | | | Server |
  16. | |<-(F)--- Protected Resource ---| |
  17. +--------+ +---------------+

客户端用于从资源所有者获得授权许可(步骤(A)和(B)所示)的更好方法是使用授权服务器作为中介,而不是直接从资源所有者获取

3、授权许可

(一)授权码

客户端引导资源所有者至授权服务器,许可后授权服务器引导资源所有者带着code授权码回到客户端,客户端再带着code访问授权服务器获取token

(二)隐式许可

简化的授权码模式,资源所有者在授权服务器验证通过以后,直接带着token令牌返回客户端。

减少请求往返的数量,增加了安全风险。在传输的过程中暴露了令牌,没有对客户端做验证

(三)资源所有者密码凭据

当资源所有者和客户端高度信任时,客户端直接带着资源所有者的密码凭据访问授权服务器,换回token

用来一次性获取令牌,客户端可以不用保存资源所有者的密码凭据

(四)客户端凭据

当客户端自己代表资源所有者或者实现和授权服务器约定好时,客户端带着自己的凭据访问授权服务器,换回token

4、访问令牌

令牌代表了访问权限的由资源所有者许可并由资源服务器和授权服务器实施的具体范围和期限

5、刷新令牌

授权服务器可以在颁发访问令牌时多颁发一个刷新令牌

  • 用于客户端在访问令牌即将过期时向授权服务器换取新访问令牌
  • 用于客户端向授权服务器换取权限相等或更窄范围的访问令牌
  1. +--------+ +---------------+
  2. | |--(A)------- Authorization Grant --------->| |
  3. | | | |
  4. | |<-(B)----------- Access Token -------------| |
  5. | | & Refresh Token | |
  6. | | | |
  7. | | +----------+ | |
  8. | |--(C)---- Access Token ---->| | | |
  9. | | | | | |
  10. | |<-(D)- Protected Resource --| Resource | | Authorization |
  11. | Client | | Server | | Server |
  12. | |--(E)---- Access Token ---->| | | |
  13. | | | | | |
  14. | |<-(F)- Invalid Token Error -| | | |
  15. | | +----------+ | |
  16. | | | |
  17. | |--(G)----------- Refresh Token ----------->| |
  18. | | | |
  19. | |<-(H)----------- Access Token -------------| |
  20. +--------+ & Optional Refresh Token +---------------+

二、客户端注册

客户端需要在授权服务器上注册,不用直接交互,可以依靠其他方式来建立信任关系

当注册客户端时,客户端开发者应该:

  • 指定客户端类型
  • 提供客户端重定向URI
  • 包含授权服务器要求的任何其他信息(如,应用名称、网址、描述、Logo图片、接受法律条款等)

1、客户端类型

根据安全情况分:

  • 机密客户端
  • 公开客户端

根据客户端配置分:

  • Web应用程序
  • 基于用户代理的应用
  • 本机应用程序

2、客户端标志

一个代表客户端提供的注册信息的唯一字符串

3、客户端身份验证

使用client_id和client_secret作为客户端凭据

使用Basic Authorization基本认证在请求正文中传输,例如:

Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3

三、协议端点

授权过程采用了两种授权服务器端点(HTTP资源):

  • 授权端点——客户端用其通过用户代理重定向从资源所有者获取授权。
  • 令牌端点——客户端用其将授权许可交换为访问令牌,通常伴有客户端身份验证。

  以及一种客户端端点:

  •  重定向端点——授权服务器用其通过资源所有者用户代理向客户端返回含有授权凭据的响应。

并不是每种授权许可类型都采用两种端点。

1、授权端点

授权端点被授权码许可类型和隐式许可类型流程使用

客户端使用response_type参数通知授权服务器期望的许可类型,"code"是授权码许可,"token"是隐式许可

完成资源所有者的交互后,授权服务器将用户代理重定向至重定向端点"redirect_uri"

授权服务器必须要求公开客户端和采用隐式许可的机密客户端注册重定向端点,必须是绝对URI,可以注册多个

2、令牌端点

客户端使用授权许可或刷新令牌从令牌端点获取令牌,只有隐式许可用不到

当发起令牌请求时必须使用"POST"方法

在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端与授权服务器进行身份验证,可以使用“client_id”请求参数标识自己

3、访问令牌范围

客户端可以使用“scope”参数来指定访问请求的范围

四、获得授权

OAuth2.0摘要的更多相关文章

  1. DotNetOpenAuth搭建OAuth2.0

    使用DotNetOpenAuth搭建OAuth2.0授权框架 标题还是一如既往的难取. 我认为对于一个普遍问题,必有对应的一个简洁优美的解决方案.当然这也许只是我的一厢情愿,因为根据宇宙法则,所有事物 ...

  2. 从协议入手,剖析OAuth2.0(译 RFC 6749)

    1.介绍      https://tools.ietf.org/html/rfc6749  传统的client-server授权模型,客户端通过使用凭证(通常的用户名和明文密码)访问服务端受保护的资 ...

  3. springboot+spring security +oauth2.0 demo搭建(password模式)(认证授权端与资源服务端分离的形式)

    项目security_simple(认证授权项目) 1.新建springboot项目 这儿选择springboot版本我选择的是2.0.6 点击finish后完成项目的创建 2.引入maven依赖  ...

  4. 【oauth2.0】【2】JAVA 客户端模式

    含义:用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题 步骤: (A)客户端向认证服务器进行身份认证,并要求一个访问令牌(token). (B ...

  5. OAUTH2.0协议-菜鸟级

    OAUTH2.0入门必看 一.摘要 OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即 ...

  6. SimpleSSO:使用Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Security.SimpleSSO模拟OpenID认证 通过authorization co ...

  7. 分享一个单点登录、OAuth2.0授权系统源码(SimpleSSO)

    SimpleSSO 关于OAuth 2.0介绍: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 系统效果: 登录界面: 首页: 应用界面: ...

  8. 【OAuth2.0】Spring Security OAuth2.0篇之初识

    不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...

  9. 深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...

随机推荐

  1. Hive 系列(七)—— Hive 常用 DML 操作

    一.加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (p ...

  2. CodeForces 1200F

    题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...

  3. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(四)

    (七)设计规约 1. [强制] 存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档. 说明: 有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡 ...

  4. python修改内存,(修改植物大战僵尸)

    import win32process # 进程模块 import win32con # 系统定义 import win32api # 调用系统模块 import ctypes # c语言类型 imp ...

  5. 牛客 136G-指纹锁 set容器重载

    136G-指纹锁 题意: 设计一个容器,支持插入x,若与容器中的值最小相差为k,则自动忽略.删除操作,把与x相差为k的值都从容器中删除.查询操作,问容器中有没有和x相差为k的数值. 思路: 一个stl ...

  6. 天梯杯 L2-005. 集合相似度

    L2-005. 集合相似度 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定两个整数集合,它们的相似度定义为:Nc/Nt*1 ...

  7. lightoj 1074 - Extended Traffic(spfa+负环判断)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1074 题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市I到另一个城市J ...

  8. hdu 1301 Jungle Roads krusckal,最小生成树,并查集

    The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was s ...

  9. yzoj P2349 取数 题解

    题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N* K).另外我们可以重新定义F[I,J]表示从 ...

  10. 基于 APIGateway 打造生产级别的 Knative 服务

    作者 | 阿里云智能事业群高级开发工程师  元毅 导读:在实际应用中,通过 APIGateway(即 API 网关),可以为内部服务提供保护.提供统一的鉴权管理.限流.监控等能力,开发人员只需要关注内 ...