【OAuth】快速入门

一、引言

1、什么是OAuth2.0?

        OAuth 2.0是一个关于授权的开放网络协议,允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应用与服务提供商之间设置了一个授权层,将用户与客户端区分开来,使得第三方应用不能直接登录服务提供商,只能登录授权层。服务提供商根据令牌的权限范围和有效期,向第三方应用开放用户资源。

        与OAuth 1.0相比,OAuth 2.0不向后兼容,且更加关注客户端开发者的简易性。同时,OAuth 2.0为Web应用、桌面应用、手机和起居室设备提供了专门的认证流程。在认证和授权的过程中涉及的三方包括:服务提供方(用户使用服务提供方来存储受保护的资源,如照片、视频、联系人列表)、用户(存放在服务提供方的受保护的资源的拥有者)和客户端(即第三方应用)。

2、为什么要使用OAuth2.0,原因?

  1. 用户不再需要注册大量账号。在以前,每使用一个新的网站或者APP都需要注册一个账号,建立一套新的账户体系才能使用网站或APP提供的服务。而OAuth2.0简化了这个过程,用户只需要授权给第三方应用,就可以让第三方应用访问特定的资源。
  2. OAuth2.0可以实现单点登录。如果一个公司有很多个需要用户登录才能提供服务的子产品(比如:官网、APP、微信公众号等),这种情况下为每个产品都开发一个登录、授权模块显然是不太优雅。使用OAuth2.0可以让所有需要登录的产品都请求同一个登录授权中心,进行统一登录授权处理。
  3. OAuth2.0可以用于分布式系统的权限控制。因为基于OAuth2.0协议获得的令牌(Access Token)同时关联了接入的第三方应用、授权用户、权限范围等信息。因此,在第三方应用拿着Token请求资源的时候,资源服务应用就可以很容易根据其访问权限返回相应的数据。
  4. OAuth 2.0关注客户端开发者的简易性。它为Web应用、桌面应用和手机,以及智能家居设备提供专门的认证流程。

3、作用

OAuth 2.0协议的主要作用是授权,它允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。这个协议关注客户端开发者的简易性,为Web应用、桌面应用和手机,以及智能家居设备提供专门的认证流程。

在OAuth 2.0中,用户通过客户端向服务提供方请求一个临时令牌,该令牌授权第三方应用在特定的时段内访问特定的资源。用户只需授权一次,就可以让第三方应用访问其存储在服务提供者上的信息,而不需要每次都分享他们的访问许可或他们数据的所有内容。

对于第三方应用来说,无需存储用户相关账号密码等信息;对于用户访问来说,省去注册用户等繁琐步骤。因此,OAuth 2.0广泛应用于一些知名网站(如QQ、微信、微博等)授权第三方应用(比如:自己搭建的应用),以获取知名网站用户的个人信息,如昵称、性别、头像等。

二、协议流程

1、应用场景

  1. 第三方联合登录:例如QQ、微信等提供的联合登录功能,用户只需在第三方应用中授权,就可以直接登录并访问自己的账户信息。
  2. 开放接口:许多大型互联网公司(如蚂蚁金服、腾讯等)会开放自己的API接口,让第三方开发者可以接入并使用他们的服务。OAuth 2.0可以用于授权第三方应用访问这些开放接口,从而获取或操作资源。
  3. 应用与网站之间的数据共享:例如,一个用户可以在多个设备上使用同一账号登录某个应用或网站,OAuth 2.0可以帮助实现数据的同步和共享。
  4. 单点登录:在需要多个账号登录的应用或网站中,OAuth 2.0可以帮助用户使用同一账号登录所有应用或网站,实现单点登录。
  5. 设备授权:例如智能家居设备,用户可以通过OAuth 2.0授权第三方应用控制自己的智能家居设备。

🐉步骤解读

  1. 在网站上面点击第三方授权,重定向到第三方授权服务页面等待获取授权码;
  2. 在手机上扫描二维码进行授权,将重定向到客户端应用提供的URL。

  3. 客户端使用上一步获取的授权码,向官方授权服务器申请令牌(Token);

  4. 官方授权服务器对客户端进行认证以后,确认无误,同意发放令牌;

  5. 客户端使用令牌向资源服务器(微信)申请获取资源;

  6. 资源服务器(微信)确认令牌无误后,同意向客户端开放资源;

2、角色

  1. Third-party application:第三方应用程序,又称"客户端"(client),即例子中的"Gitee"。

  2. HTTP service:HTTP服务提供商,简称"服务提供商",即例子中的微信。

  3. Resource Owner:资源所有者,又称"用户",也就是你(user)。

  4. User Agent:用户代理,比如浏览器。

  5. Authorization server:授权服务器,即服务提供商专门用来处理认证授权的服务器。

  6. Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与授权服务器,可以是同一台服务器,也可以是不同的服务器。

OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务提供商"进行交互。

主要角色

  • 资源拥有者(Resource Owner):通常是用户,拥有并授权访问其个人资源。
  • 客户端(Client):负责发起资源请求的应用或服务,比如第三方应用。
  • 资源服务(Resource Server):存储并处理用户资源的服务器。
  • 认证服务器(Authorization Server):负责处理用户的授权请求,颁发访问令牌。

3、认证流程

  1. 客户端向用户请求授权,并出示自己的身份。
  2. 用户在客户端的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
  3. 授权成功后,服务提供方引导用户返回客户端的网页。
  4. 客户端根据临时令牌从服务提供方那里获取访问令牌。
  5. 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
  6. 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

(A)用户打开客户端以后,客户端要求用户给予授权。

(B)用户同意给予客户端授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

🐂令牌的特点

  • 令牌又时效性,一般是短期的,且不能修改,密码一般是长期有效的

  • 令牌可以由颁发者撤销,且即时生效,密码一般可以不用修改而长期有效

  • 令牌可以设定权限的范围,且使用者无法修改

在使用令牌时需要保证令牌的保密,令牌验证有效即可进入系统,不会再做其他的验证。

三、OAuth2.0授权模式

  1. 授权码模式(Authorization Code):这是最常用且安全级别最高的授权模式。在授权码模式下,客户端首先通过用户在授权服务器上获取授权码(Authorization Code)。然后,客户端使用这个授权码向授权服务器换取访问令牌。
  2. 隐式模式(Implicit):这种模式适用于纯前端应用,没有后端服务。客户端直接请求授权服务器获得访问令牌,并将其存储在前端应用中以供以后使用。
  3. 密码模式(Resource Owner Password Credentials):在这种模式下,客户端直接从用户那里获取用户名和密码,然后使用这些凭据直接向授权服务器请求访问令牌。
  4. 客户端凭证模式(Client Credentials):在这种模式下,客户端提供自己的凭证(通常是一些证书或者API密钥)来获取访问令牌。这种模式通常用于机器对机器的通信,例如,一个服务器向另一个服务器请求访问某个资源。

1、授权码模式(Authorization Code)

        授权码模式是最常用且安全级别最高的授权模式。在这种模式下,客户端首先通过用户在授权服务器上获取授权码。然后,客户端使用这个授权码向授权服务器换取访问令牌。具体流程包括用户访问页面时,重定向到认证服务器,认证服务器给用户一个认证页面,等待用户授权,用户在认证页面上做出决定,认证服务器接收用户的决定并返回授权码给客户端,客户端在后台向授权服务器请求令牌,并使用授权码换取访问令牌。

2、隐式模式(Implicit)

        隐式授权模式适用于纯前端应用,没有后端服务。在这种模式下,客户端直接请求授权服务器获得访问令牌,并将其存储在前端应用中以供以后使用。由于访问令牌是在客户端的浏览器中存储的,因此存在一定的安全风险。

3、密码模式(Resource Owner Password Credentials)

        在这种模式下,客户端直接从用户那里获取用户名和密码,然后使用这些凭据直接向授权服务器请求访问令牌。这种模式的优点是简单易用,但存在安全风险,因为用户密码可能会被泄露。

4、客户端凭证模式(Client Credentials)

        在这种模式下,客户端提供自己的凭证(通常是一些证书或者API密钥)来获取访问令牌。这种模式通常用于机器对机器的通信,例如,一个服务器向另一个服务器请求访问某个资源。这种模式的优点是可以减少对用户的依赖,但需要确保客户端凭证的安全性。

流程总结

  1. 客户端向资源所有者请求授权。授权请求可以直接向资源所有者发起,或者通过作为中介的授权服务器间接发起。
  2. 客户端收到授权许可,这是一个代表资源所有者的授权的凭据,使用本规范中定义的四种许可类型之一或者使用扩展许可类型表示。
  3. 客户端与授权服务器进行身份认证并出示授权许可请求访问令牌。
  4. 授权服务器验证客户端身份并验证授权许可,若有效则颁发访问令牌。
  5. 客户端从资源服务器请求受保护资源并出示访问令牌进行身份验证。
  6. 资源服务器验证访问令牌,若有效则满足该请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脚本解决.NET MVC按钮重复提交问题

见于:Avoiding Duplicate form submission in Asp.net MVC by clicking submit twice 脚本代码: $(document).on(invalid-form.validate, form, function () {var button $(this).find(input[type"submit"]);setTimeout(function () {button.…

== 与 === 介绍与区别

操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,并且两个值的String内容相同,返回true 要是两个值都是true或者都是false,返回tr…

jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍

Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包。简单来说 Oracle JET 是一个一堆好用的前端工具结合体。Oracle JET 文档链接 http://docs.oracle.com/middleware/jet310/jet/developer/toc.htmOracle JET支持 Model-View-ViewMod…

Why you have so few friends?

Why you have so few friends?十个原因告诉你:为什么你的朋友那么少1. You Complain A Lot 你总是抱怨 If you’re constantly complaining about your job, lack of money, or unfair life, people won’t care to spend a lot of time with you. Complaining g…

查看oracle自动优化,使用索引查询更快,优化器为何不能自动识别

本帖最后由 〇〇 于 2015-12-24 12:17 编辑有如下查询,不加hint时,优化器自己选择的执行计划是走全表扫描,花费时间很长,但加hint强制让大表走skip index时间很短,根据传统的理解,引导列上重复出现的值越少…

javascript: 数组

var a[1,2,3] >a[0] 1 >a[1] 2 >a[2] 3 >a[3] undefined >a[-1] undefined for循环遍历每个元素 for(var key in a){console.log(a[key]);} 1 2 3 数组对象对应的方法(method) >a.length//数组元素个数 3>a.push(4)//在数组最后追加元素4>a[1, 2, 3, 4…

SELECT语句使用JDBC和Hibernate批量获取

介绍 现在,我已经介绍了Hibernate对INSERT , UPDATE和DELETE语句的批处理支持,是时候分析SELECT语句结果集的批量提取了。 JDBC ResultSet提供了一个客户端代理游标,用于获取当前语句的返回数据。 执行该语句后,必须将…

linux 更改父进程名称,[Linux进程]在父进程和子进程中分别修改变量

/*这是一个调用fork函数创建一个子进程,然后分别打印输出子进程和父进程中的变量的实例*/#include #include #include #include int glob 6; //外部变量int main(void){int var; //内部变量pid_t pid; //文件标识符var 88;//内部变量printf("…

Spring环境的搭建与测试 (spring2.5.6)

这里是采用的视频里面的spring版本 下载spring2.5.6, 然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下 dist\spring.jar lib\jakarta-commons\commons-logging.jar 上边两个是基本的jar包。。 如果使用了切面编程(AOP),还需要下列…

linux 多核 系统时钟,Linux中的时间

1. Linux中time相关概念1.1 real time指的是实际流逝的时间,又称为Wall Clock Time(墙上时间)。比如,time命令统计出的real time指的是该进程从开始运行到运行结束所消耗的时间。在这段时间内不仅仅执行了该进程,其他进程的时间片也得到了轮转…

经纬度 在线计算距离

http://www.storyday.com/wp-content/uploads/2008/09/latlung_dis.html 转载于:https://www.cnblogs.com/sgdkg/p/3558112.html

如何使用Hibernate批处理INSERT和UPDATE语句

介绍 JDBC长期以来一直为DML语句批处理提供支持。 默认情况下,所有语句都一个接一个地发送,每个语句都在单独的网络往返中发送。 批处理使我们能够一次性发送多个语句,从而节省了不必要的套接字流刷新。 Hibernate将数据库语句隐藏在事务后写…

【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器

【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器 原文:【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器注:本文是【ASP.NET Web API系列教程】的一部分,如果您是第一次看本系列教程,请先看前面的内容。 Batching Handler for ASP.N…

linux 查看系统组账号密码是什么,Linux 用户与组管理详解(system-config-users 命令行)...

用户与组管理用户相关文件组账号相关文件用户和组管理软件:基于命令行的用户和组管理创建用户查看用户信息删除用户修改用户信息为用户创建密码更改用户密码信息创建组删除组查看当前登录到系统的用户用户与组管理什么是用户,用户是人吗?用户…

C++中指针和引用的选择

何时使用引用和指针1. 尽可能使用引用传递参数2. 尽可能的使用const来保护引用和指针3. 在可以使用引用的时候不要使用指针4. 不要试图给引用重新赋值,使之指向另一个变量,这是不可能的(因为引用是变量的别名,和变量是统一的&…

linux 7 没有权限访问,[CentOS 7系列]文件或目录的权限与属性

在开始今天的话题之前,我们首先来回顾下ls命令。在ls命令中参数“-l”会显示出来目标的详细信息,如下所示:[rootserver02~]#ls-l/tmp/总用量4-rwx------.1rootroot8365月2706:19ks-script-ogzDFAdrwxr-xr-x.5rootroot755月3005:26testdrwxr-x…

POJ 2386 Lake Counting DFS水水

http://poj.org/problem?id2386 题目大意: 有一个大小为N*M的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼? 思路: 水题~直接DFS,DFS过程把途中表示水洼的W改为‘.,看…

linux没有root密码xshell,LINUX终端免密登陆(以Xshell为例)

1,工具-新建用户密钥生成向导linux2,密钥类型选择:RSA,而后下一步shell3,输入密钥名称和密码ssh4,公钥格式为SSH-OpenSSH,保存为文件(后缀为pub)(记录此文件目录)工具二,登陆在须要免密登陆的主…

ActionBar之style出现Cannot resolve symbol 'Theme' 错误

今天 2014/03/08 00:49 刚刚升级 android studio 到了 0.5.0 版本,修复了许多 bug,包含当前这个问题,之前一直困扰我很久,莫名奇妙的提示主题样式找不到,无法解析, 后来一直谷歌发现很多人都认为是 IDE 的b…

单片机上运行linux程序代码,在Linux下烧录51单片机

原标题:在Linux下烧录51单片机*本文作者:LEdge1,本文属 FreeBuf原创奖励计划,未经许可禁止转载。背景我一直在学习Linux 系统,但是最近还要学习51单片机,所以在Linux下给51单片机烧录程序那是非常必要的。之…