我的编程空间,编程开发者的网络收藏夹
学习永远不晚

OAuth2.0介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

OAuth2.0介绍

概述

OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。
本文主要参考材料为 RFC 6749

初步理解

接下来以一个生活中的例子来简单解释OAuth3的应用场景。
我家所在的小区门禁系统升级,用户可以下载物业的手机APP,注册用户并通过物业审核之后,就可以使用APP中的“蓝牙开门”功能开启大门。
OAuth2.0介绍

有一次,朋友给我打电话说要到我家拜访,通过访客邀请功能填写基本的信息,然后发送一个微信小程序链接给朋友
OAuth2.0介绍

朋友点开小程序,点击一键开门就可以进入小区,当天有效并且限制使用8次
OAuth2.0介绍
整个过程就相当于一次授权:
小区可以理解成被保护的资源,我本人拥有APP的用户和密码,登陆后可以使用一键开门进入小区。
朋友打电话给我申请授权,我通过APP发放一个凭证(微信小程序),朋友可以在凭证有效期内进入小区。
授权机制可以方便的允许第三方(朋友)访问被保护的资源(小区),同时不需要提供用户密码。

OAuth3.0标准

OAuth3.0中的角色

  • resource owner: 资源拥有者,可以对资源进行访问授权,通常是指应用的终端用户
  • resource server:资源服务器,包含被保护的资源,可以接受携带访问凭证的请求
  • client:客户端,即第三方应用,会代表resource owner请求访问resource server的资源
  • authorization server:认证服务器,为客户端颁发访问凭证
  • user-agent:用户代理,通常就是指Web浏览器

OAuth3.0的流程

OAuth2.0介绍
(A) 客户端(Client)向资源拥有者(Resource Owner)申请授权,资源拥有者(Resource Owner)可以直接授权,但最好是通过Autherization进行授权
(B)客户端(Client)获得授权的允许凭据(Authorization Grant),在OAuth3.0中该凭据的获取有四种类型,授权码、隐藏式、用户密码和客户端凭证
(C)客户端(Client)使用授权凭据向授权服务器(Authorization Server)申请访问凭证(Access Token)
(D)认证服务器(Authorization Server)验证申请凭据(Authorization Grant),验证通过后颁发访问凭证(Access Token)
(E)客户端(Client)使用访问凭证(Access Token)访问资源服务器(Resource Server)
(F)资源服务器(Resource Server)验证访问凭证(Access Token),验证通过后对客户端(Client)请求进行处理并返回结果

刷新凭证(Refresh Token)

刷新凭证(Refresh Token)是由认证服务器(Authorization Server)颁发给客户端(Client),用于在当前凭证失效或者过期时,重新获取一个新的访问凭证(Access Token)。但颁发刷新凭证(Refresh Token)对于认证服务器(Authorization Server)是可选择的功能,如果支持,刷新凭证(Refresh Token)会与访问凭证(Access Token)一同颁发
OAuth2.0介绍
(A)客户端(Client)使用授权凭据(Authorization Grant)请求访问凭证(Access Tonken)
(B)认证服务器(Authorization Server)验证凭据通过后,颁发访问凭证(Access Token)和刷新凭证(Refresh Token)
(C)客户端(Client)使用访问凭证(Access Token)访问资源服务器(Resource Server)
(D)资源服务器(Resource Server)验证访问凭证(Access Token),验证通过对请求进行处理
(E)步骤(C)、(D)会不断重复,直到访问凭证(Access Token)过期,此时流程会跳转至(G)
(F)由于凭证过期,资源服务器会返回凭证过期的错误
(G)客户端(Client)使用刷新凭证(Refresh Token)请求新的访问凭证(Access Token)
(H)认证服务器验证刷新凭证,验证通过,办法新的访问凭证和刷新凭证

客户端的授权类型

授权码模式

流程

OAuth2.0介绍
(A)客户端(Client)使浏览器(User-Agent)跳转至认证服务器(Authorization Server)的认证接口,请求信息包含客户端标识、请求范围、跳转URI(跳转至客户端,用来提取授权码)
(B)认证服务器(Authorization Server)验证资源所有者(Resource Owner),通常就是用户填写用户名密码并确认是否授权
(C)认证服务器(Authorization Server)如果验证通过,则会返回给浏览器(User-Agent)步骤(A)中发送的跳转URI,跳转至客户端(Client),跳转URI中同时会携带授权码(Authorization Code)
(D)客户端(Client)使用授权码(Authorization Server)向认证服务器(Authorization Server)请求访问凭证(Access Token),同时还会携带跳转URI用于客户端提取访问凭证(Access Token)
(E)认证服务器(Authorization Server)验证授权码(Authorization Server),验证通过后颁发访问凭证(Access Token)

授权码请求(Authorization Request)

请求包含以下参数:

  • response_type:表示授权类型,必选项,此处的值固定为”code”
  • client_id:表示客户端的ID,必选项
  • redirect_uri:表示重定向URI,可选项
  • scope:表示申请的权限范围,可选项
  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
    GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz      &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1Host: server.example.com
授权码响应(Authorization Response)

响应包含以下参数:

  • code:表示授权码,必选项。该码的有效期应该很短,通常设为10分钟,客户端只能使用该码一次,否则会被授权服务器拒绝。该码与客户端ID和重定向URI,是一一对应关系。
  • state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
    HTTP/1.1 302 FoundLocation: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA        &state=xyz
访问凭证请求(Access Token Request)
  • grant_type:表示使用的授权模式,必选项,此处的值固定为”authorization_code”。
  • code:表示上一步获得的授权码,必选项。
  • redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致。
  • client_id:表示客户端ID,必选项。
    POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencodedgrant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
访问凭证响应(Access Token Response)
  • access_token:表示访问令牌,必选项。
  • token_type:表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。
  • expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
  • refresh_token:表示更新令牌,用来获取下一次的访问令牌,可选项。
  • scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache{"access_token":"2YotnFZFEjr1zCsicMWpAA","token_type":"example","expires_in":3600,"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA","example_parameter":"example_value"}

隐藏模式

流程

OAuth2.0介绍
(A)客户端(Client)通过浏览器(User-Agent)跳转至认证服务器(Authorization),请求中包含客户端标识和跳转URI
(B)用户(Resource Owner)填写用户密码,认证服务器(Authorization)对其进行认证
(C)认证服务器(Authorization)认证通过后,返回之前传入的跳转URI至浏览器,跳转URI中以锚点(#)的方式包含访问凭证(Access Token)
(D)浏览器(User-Agent)跳转至URI指向的客户端的Web服务器,浏览器(User-Agent)保留锚点之后的信息
(E)客户端Web服务器返回一个web页面(其中包含嵌入的脚本),web页面能够提取锚点中的信息,并发送完整的URI至客户端
(F)浏览器(User-Agent)执行Web页面中的脚本
(G)浏览器(User-Agent)发送访问凭证(Access Token)至客户端(Client)

Authorization Request

参数包括:

  • response_type:表示授权类型,此处的值固定为”token”,必选项。
  • client_id:表示客户端的ID,必选项。
  • redirect_uri:表示重定向的URI,可选项。
  • scope:表示权限范围,可选项。
  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1Host: server.example.com
Access Token Response

参数包括:

  • access_token:表示访问令牌,必选项。
  • token_type:表示令牌类型,该值大小写不敏感,必选项。
  • expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
  • scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
  • state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
HTTP/1.1 302 FoundLocation: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600

用户密码模式

流程

OAuth2.0介绍
(A)资源所有者(Resource Owner)提供给客户端(Client)用户名和密码
(B)客户端(Client)使用用户名/密码,向认证服务器(Authorization Server)请求访问凭证(Access Token)
(C)证服务器(Authorization Server)验证用户名/密码,验证通过后颁发访问凭证(Access Token)

访问凭证请求 Access Token Request

参数包括:

  • grant_type:表示授权类型,此处的值固定为”password”,必选项。
  • username:表示用户名,必选项。
  • password:表示用户的密码,必选项。
  • scope:表示权限范围,可选项。
POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencodedgrant_type=password&username=johndoe&password=A3ddj3w
访问凭证响应 Access Token Response
HTTP/1.1 200 OK     Content-Type: application/json;charset=UTF-8     Cache-Control: no-store     Pragma: no-cache     {       "access_token":"2YotnFZFEjr1zCsicMWpAA",       "token_type":"example",       "expires_in":3600,       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",       "example_parameter":"example_value"     }

客户端凭证模式

流程

OAuth2.0介绍
(A)客户端(Client)向认证服务器(Authorization Server)请求访问凭证(Access Token)
(B)认证服务器(Authorization Server)验证客户端(Client),如果验证通过则颁发访问凭证(Access Token)

Access Token Request

参数:

  • grant_type:表示授权类型,此处的值固定为”client_credentials”,必选项。
  • scope:表示权限范围,可选项。
POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencodedgrant_type=client_credentials
Access Token Response
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache{"access_token":"2YotnFZFEjr1zCsicMWpAA","token_type":"example","expires_in":3600,"example_parameter":"example_value"}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

OAuth2.0介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

OAuth2.0介绍

概述OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。本文主要参考材料为 RFC 6749 初步理解接下来以一
2023-06-02

JWT和OAuth2.0

文章目录 前言一、JWT1、JWT格式2、签名和验签HS256RS256RSA的两点基本原理RSA公钥、私钥加密的使用场景 二、OAuth2.0三、应用场景 前言 JWT和OAuth2.0没有可比性,是两
2023-08-19

OAuth2.0 social_djan

python网站第三方登录,social-auth-app-django模块,social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块目前流行的第三方登录都采用了OAuth2协议 安装: pip
2023-01-30

infinispan~介绍

国内的infinispan的文章不多,所以基本都是从google和官方api上找的资料,对一些问题的调研确实花了一些经历,但最终还是解决了问题,心情也是更加愉悦!介绍infinispan是分布式的缓存框架,可以直接嵌入到jboss(WildFly)中运行,也可
infinispan~介绍
2018-06-06
2024-04-02

document.getElementById介绍

document.getElementById()是一个JavaScript方法,用于通过给定的id值来获取HTML文档中具有该id的元素。语法:document.getElementById(id)参数:id - 表示要获取的元素的id值
2023-08-11

redis介绍

Ø开源的(BSD协议),使用ANSI  C 编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库 Ø支持数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(
redis介绍
2015-04-14
2023-09-14
2024-04-02
2024-04-02

1. 介绍

在本教程中,我们将学习如何在亚马逊AWS上搭建Linux服务器。AWS是一家全球领先的云计算服务提供商,提供了各种各样的云计算服务,包括虚拟机、存储、数据库、网络等等。AWS的EC2服务是一种弹性计算云服务,可以轻松地创建和管理虚拟机实例。首先,我们需要登录AWS控制台并创建一个EC2实例。在控制台中,选择EC2服务,然后单击“启动实例”按钮。在启动实例向导中,我们需要选择以下内容:AmazonMachineImage...
2023-10-27

python介绍

python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已是全球第4大最流行的语言目前python主要应用领域: web开发--最火的py
2023-01-30

Hadoop介绍

Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台,允许使用简单的编程模型在大量的计算机集群上对大型数据集进行分布式处理。下面是Hadoop的版本:HDFS(分布式文件系统):解决海量数据存储YARN(
Hadoop介绍
2014-08-16

MySQL介绍

什么是数据库?作用:存储数据的,能够长期(断电,关机)保持数据。数据存储在哪里:硬盘和内存我们平时说的数据库:数据库管理系统(软件)(DataBase Manager System: DBS)数据库软件(电脑的excel文件)中可以创建多个文件夹(数据库(逻辑
MySQL介绍
2017-06-20

springCloud介绍

springCloud介绍SOA:更注重于相同功能的重用,来构建一条企业功能的主线,其他的功能在这条主线上进行开发和扩展。有点类似于EJB的功能。微服务:将整个功能拆分成若干个服务,各个服务独立部署,此时的重点是业务拆分的粒度。 微服务:d
2023-06-02
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录