返回顶部
首页 > 资讯 > 精选 >OAuth2.0介绍
  • 605
分享到

OAuth2.0介绍

2023-06-02 10:06:47 605人浏览 薄情痞子
摘要

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

概述

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"}

--结束END--

本文标题: OAuth2.0介绍

本文链接: https://www.lsjlt.com/news/229754.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • OAuth2.0介绍
    概述OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。本文主要参考材料为 RFC 6749 初步理解接下来以一...
    99+
    2023-06-02
  • OAuth2.0详细介绍与实践(通俗易懂)
    一、OAuth2.0介绍 1.1 概述 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码)...
    99+
    2023-09-16
    java
  • OAuth2.0 social_djan
    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方登录都采用了OAuth2协议   安装...
    99+
    2023-01-30
    social_djan
  • JWT和OAuth2.0
    文章目录 前言一、JWT1、JWT格式2、签名和验签HS256RS256RSA的两点基本原理RSA公钥、私钥加密的使用场景 二、OAuth2.0三、应用场景 前言 JWT和OAuth2.0没有可比性,是两...
    99+
    2023-08-19
    服务器 网络 安全
  • Python~~简介介绍
    Python (英国发音:/paθn/ 美国发音:/paθɑn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于...
    99+
    2024-04-02
  • LAMP架构介绍、MYSQL介绍、安装
    LAMP 架构 LAMP 指的Linux(操作系统)、Apache(httpd服务器)、MySQL(数据库软件)和PHP(有时也是指Per或Python)的缩写,一般用来建立web服务器(三个角色可以在一...
    99+
    2024-04-02
  • Hadoop介绍
    Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台,允许使用简单的编程模型在大量的计算机集群上对大型数据集进行分布式处理。 下面是Hadoop的版本: HDFS(分布式文...
    99+
    2014-08-16
    Hadoop介绍
  • redis介绍
    Ø开源的(BSD协议),使用ANSI  C 编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库 Ø支持数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists),...
    99+
    2015-04-14
    redis介绍
  • MySQL介绍
    什么是数据库? 作用:存储数据的,能够长期(断电,关机)保持数据。 数据存储在哪里:硬盘和内存 我们平时说的数据库:数据库管理系统(软件)(DataBase Manager System: DBS) 数据库软件(电脑的excel文件)中可以...
    99+
    2017-06-20
    MySQL介绍 数据库入门 数据库基础教程
  • infinispan~介绍
    国内的infinispan的文章不多,所以基本都是从google和官方api上找的资料,对一些问题的调研确实花了一些经历,但最终还是解决了问题,心情也是更加愉悦! 介绍 infinispan是分布式的缓存框架,可以直接嵌入到jboss(W...
    99+
    2018-06-06
    infinispan~介绍
  • DBUtils介绍
      一、DBUtils介绍 apache  什么是DBUtils,它的作用  DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。  DBUtils封装了对JDBC的操作,简化了JDBC操作,...
    99+
    2024-04-02
  • Greenplum 介绍
    数据库分两种类型:1、OLTP:重吞吐和高并发;前台应用,面向客户。主要特点:a、单次处理的数据量很小b、对响应时间要求很高c、用户数量庞大2、OLAP:重计算,Greenplum属于OLAP;后台数据,面...
    99+
    2024-04-02
  • MongoDB 介绍
    MongoDB 由C++编写,是一个基于分布式文件存储的开源数据库系统,属于NoSQL在高负载情况下,可以添加更多的节点,可以保证服务器性能MongoDB旨在为WEB应用提供可扩展的高性能数据存储方案Mon...
    99+
    2024-04-02
  • EIGRP介绍
    08     IGRP和OSPF8.1   EIGRP介绍8.1.1     ...
    99+
    2024-04-02
  • ANYDATA介绍
    ANYDATA特殊列,属于Oracle内建列,对于Oracle数据库,每一个值都是一种数据类型。当用户创建表或聚簇时,需要为每一个列指定对应的数据类型。即使是创建存储过程或函数的时,一样需要为参数指定相应的...
    99+
    2024-04-02
  • 介绍PHP
    PHP是一种流行的服务器端编程语言,用于开发Web应用程序。它是一种开源的编程语言,具有易学易用的语法和强大的功能。PHP支持在服务器上运行的动态网页和Web应用程序的快速开发。 PHP可以与HTM...
    99+
    2023-09-14
    php 开发语言 PHP phpstorm 学习 学习工具
  • Kafka 介绍
    一、基本概念 1.1 什么是 kafka Kafka 它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一个分布式消息中间件, 支持分区的、多副本的、多订阅者的、基于 zookeeper 协调的分布式...
    99+
    2023-08-30
    kafka 分布式 java
  • SpringMvc介绍。
    目录 1、SpringMvc概述 1、基本介绍 2、工作流程  3、bean加载控制  二、请求 1、请求映射路径 2、请求方式 3、请求参数 4、请求参数(传递json数据) 5、日期类型参数传递 三、响应 四、REST风格 1、REST...
    99+
    2023-09-01
    java SpringMVC
  • python介绍
    python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已是全球第4大最流行的语言目前python主要应用领域:  web开发-...
    99+
    2023-01-30
    python
  • springCloud介绍
    springCloud介绍SOA:更注重于相同功能的重用,来构建一条企业功能的主线,其他的功能在这条主线上进行开发和扩展。有点类似于EJB的功能。微服务:将整个功能拆分成若干个服务,各个服务独立部署,此时的重点是业务拆分的粒度。 ...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作