【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,一经查实,立即删除!

相关文章

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…

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

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

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

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

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

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

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

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

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单片机烧录程序那是非常必要的。之…

linux运行core控制台程序,VisualStudioCode创建的asp.net core控制台程序部署到linux

1、asp.net core控制台程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、发布发布前,修改test2.csproj文件(项目名称为test2)Exenetcoreapp2.1centos.7-x64主要添…

wps linux版本支持vba,Wps vba安装包

wps vba是款专用于wps办公软件的宏插件,可以利用VBA制作Excel登录系统,实现一些VB无法实现的功能,操作界面人性化,方便用户的操作,还可以利用VBA来Excel内轻松开发出功能强大的自动化程序。软件简介:wps vb…

我的Dojo中有一个Mojo(如何编写Maven插件)

我一直忙于在工作中使用Maven的腋窝。 对于很多开发人员,我会听到:“那又怎样。” 不同之处在于,我通常在无法直接访问Internet的环境中工作。 因此,当我说我经常使用Maven时,这意味着某些事情。 依赖地狱 公平地说&a…

在linux下安装mongo数据库,Linux系统下安装MongoDB

MongoDB提供了Linux系统上32位和64位的安装包,你可以在官网下载安装包。下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。curl-O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载tar-zxvf mongodb-linux-x86_64-…

Windows 8.1 新增控件之 Hyperlink

Windows 8.1 新增控件之 Hyperlink 原文:Windows 8.1 新增控件之 HyperlinkHyperlink 控件应该不用过多介绍大家肯定十分清楚其作用&#xff0c;它的功能就像HTML中的<a href””>标签一样&#xff0c;只不过是在XAML中实现。 使用Hyperlink 标记的文字在应用中会以特殊颜…

Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器

极客专栏《Nginx核心知识100讲》38小节的笔记nginx 不同的worker之间需要共享信息的时候&#xff0c;只能通过共享内存。共享内存会使用链表&#xff0c;红黑树这样的数据结构。但是每个红黑树上有很多节点&#xff0c;每个节点上都需要分配内存去存放。怎样把一整块共享内存切…

睡觉时:新增的Java 8新增功能

自Java 8推出以来&#xff0c;最有趣的功能是什么&#xff1f; Java 8最近庆祝了它的第一个生日&#xff0c;而主要版本刚刚一年多前发布。 这当然值得庆祝。 自从最初的Java 8版本问世以来&#xff0c;已经发布了六个更新。 这些更新中的一些元素是次要的&#xff0c;但是如…

树莓派安装win10arm linux,在树莓派3B 上安装 Windows 10 ARM 版的方法

早先关注我们的朋友可能对《国外开发者尝试在树莓派3上运行Windows 10桌面版》有印象。本文转自 amatfan.com&#xff0c;文末视频来自 daveb778(感谢柠栀和刺分享)&#xff0c;给出了如何在树莓派3B上安装Windows10 ARM版&#xff0c;是的&#xff0c;这次并非IoT版&#xff0…

各种触摸手势

轻按(UITapGestureRecognizer) -- 用一个或多个手指在屏幕上轻按。 按住(UILongPressGestureRecognizer) -- 用一个或多个手指在屏幕上按住。 轻扫(UISwipeGestureRecognizer) -- 用一个或多个手指沿特定方向轻扫。 张合(UIPinchGestureRecognizer) -- 张合手指以缩放对象。 旋…

宝塔linux取消登录,宝塔面板如何关闭安全入口

通过 SSH 终端关闭安全入口通过 SSH 终端连接rm -f /www/server/panel/data/admin_path.pl即可关闭宝塔 Linux 面板的安全入口&#xff0c;关闭之后的面板登录地址就是&#xff1a;http://服务器 IP:8888。不过关闭这个安全入口之后很难恢复&#xff0c;所以不建议关闭宝塔面板…

[ofbiz]设置任务计划(job),提示service_item已经传递

问题描述&#xff1a;设置任务计划(job)&#xff0c;提示service_item已经传递 解决办法&#xff1a; 红色框内不要填写&#xff0c;就可以了。"已经传递"是翻译的不准确&#xff0c;应该是"已过时"&#xff0c;所以不设置开始时间&#xff0c;或者开始时间…

c支限界算法语言n皇后问题分,n皇后问题(分析)

这道题需要用到回溯算法&#xff0c;现在在这里先简单的介绍一下这个算法&#xff1a;回溯算法也叫试探法&#xff0c;它是一种系统地搜索问题的解的方法。回溯算法的基本思想是&#xff1a;从一条路往前走&#xff0c;能进则进&#xff0c;不能进则退回来&#xff0c;换一条路…