oauth2 access_denied 不允许访问_OAuth 2 是什么-入门介绍

OAuth 2是什么

OAuth 2是一个可以通过浏览器,手机等多种设备进行安全授权的一个标准简单的开源协议。

随着互联网的兴起以及普及,越来越多的应用出现在用户的面前。这些应用大部分都是相对独立的以及由不同的公司进行运营的。不同的应用也保存了不同的数据。因此跨应用的数据访问就变得不可避免。当我们需要跨应用访问数据的时候,我们就需要解决如何让应用A能够访问到应用B中的用户数据。比如说,在百度云或者OneDrive中保存了相片(应用B),相片打印服务(应用A)就需要访问百度云或者OneDrive中的数据进行处理。

一种最简单的方法就是应用A询问用户在应用B中的认证信息,然后使用这个认证信息进行数据访问。但是这样子就意味着应用A拥有了用户的认证信息,应用A可以随意访问用户在应用B中的数据(虽然每个应用都声称不会滥用,但谁知道呢)。

因此需要一种方案可以能够授权应用A适当的权限来获取应用B中的数据。而OAuth 2就是这么一种解决方案。

代客泊车钥匙的例子

计算机世界,很多时候都是现实世界的映射,OAuth 2也不例外。

在影视作品中,我们常常可以看到主角们开着车来到一个豪华的酒店或者赌场的大堂,下了车之后直接扔了一副车钥匙给服务生。服务生会替车主将车停好。如果是一辆小破车,或许车主还不至于太担心服务生把车私自开走。但是要是是一辆豪车的话,就很难说了。

那么之所以服务生没有能把车开走,秘诀就在这个车钥匙上。这个车钥匙是代客泊车专用钥匙(英文叫做valet parking key)。这钥匙只能限制性的操作车中的某些功能,比如只能以时速不超过20km/h行驶,或者不能驾驶超过10分钟,还有类似无法打开天窗和后备箱。通过这种功能性的限制(权限限制),使得服务生只能操作被允许的功能即代客泊车,而无法完成超过其权限的操作,比如拿走后备箱的东西等等。

在这个例子中,涉及到了五个部分,车主,服务生,代客泊车钥匙,车主钥匙,以及车。这五个部分对应到OAuth 2的场景中就是,资源所有者,客户终端,token,资源所有者在资源服务器上的用户名和密码,资源服务器上的资源。如果用我们上面应用A和应用B的场景,那就是服务生=应用A=客户终端,车=应用2=资源服务器上的资源。

OAuth 2 组件

在上面的例子中也简略的提到了OAuth 2的各个组件。OAuth 2中一共涉及到4个组件,客户端,用户也就是资源所有者,授权服务器,以及资源服务器。

这四个组件的大致关系如下图所示。授权服务器是一个能够提供受限的密钥(key)或者令牌(token)类似于上文提到的valet parking key。

客户端包括了可信客户端和非可信客户端。可信客户端一般是指客户端和资源服务器属于同一个团体开发的,比如微博的资源服务器和微博官方客户端。非可信客户端,则一般指由第三方开发的客户端,比如很多第三方的微博应用。

6241011047259ad0c3ce449475762b59.png

OAuth 2中的各个组件

从上图的示例中可以看出,用户即资源所有者可以通过客户端访问资源服务器上的资源。客户端为了能够访问资源服务器,需要先获得一个令牌(token)。由于用户并不想直接将资源服务器的用户名密码透露给客户端,用户可以通过授权服务器给予客户端一个临时的受限访问令牌。

客户端在使用授权服务器之前必须先进行注册(一次性操作),注册的目的是让授权服务器清楚之后的授权请求是由哪个客户端发起的。同时注册的时候也会约定好之后通信所使用的密钥等信息。

客户端在完成注册之后,就可以通过下面将讲到的OAuth 2流程来获得令牌(token),然后通过令牌来访问资源服务器上的资源。

可信域

在这个授权流程中,我们还需要注意可信域,这会帮助我们后面理解为什么OAuth 2 不合适作为认证工具。可信域代表了域中组件的相互信任关系。

从下图可以看出,默认情况下,资源服务器和授权服务器属于同一个可信域。也就意味着,授权服务器知道资源服务器哪些资源需要被保护,资源服务器也知道如何验证由授权服务器产生的令牌。授权服务器和资源服务器类似于一种强耦合的关系。此外,很显然的,资源所有者和资源服务器也具有相互信任关系。

由于,上面提到的客户端可以由第三方提供,所以其不需要和授权服务器或者资源服务器属于同一个可信域。

6b48a7d466462fbc84d357fb704946ba.png

OAuth 2涉及到的可信域

OAuth 2 流程

由于OAuth 2可以应用在不同的客户端和场景,也就导致了OAuth 2有4种不同的流程。

前两种流程涉及到了用户的交互,需要用户进行明确的授权许可。

授权码流程(Authorization Code Flow)

使用最为广泛的一种流程,基于浏览器的访问基本都使用这种流程。

  • 请求授权码
  • 请求令牌
  • 访问资源

简化模式(Implicit Flow)

  • 请求令牌
  • 访问资源

另外两种属于不需要进行任何的用户交互。

密码模式(Resource Owner Password Credential Flow)

这是类似于一些企业内部使用的授权模式。

  • 使用资源所有者的用户名密码进行令牌请求
  • 访问资源

客户端模式(Client Credential Flow)

这用于客户端到服务器的通信。

  • 使用客户端的凭据进行令牌请求
  • 访问资源

这四种模式的具体流程,我们会在之后的文章中进行详细介绍。

参考

RFC 6749 – The OAuth 2 2.0 Authorization Framework

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

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

相关文章

基于TCP协议的网络程序(基础学习)

下图是基于TCP协议的客户端/服务器程序的一般流程: 图 37.2. TCP协议通讯流程 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect(…

一段代码认识C++中const不同位置的用处

#include<iostream> using namespace std ; int main () { const int A 78 ;const int B 25 ;int C 13 ;//---------const在数据类型前-------------------- const int *pi &A ;//*pi 56 ;// 错误, 不能修改所指常量。此时*pi指向的是常量A。 pi &…

wcf系列学习5天速成——第五天 服务托管

今天是系列的终结篇&#xff0c;当然要分享一下wcf的托管方面的知识。 wcf中托管服务一般有一下四种&#xff1a; Console寄宿&#xff1a; 利于开发调试&#xff0c;但不是生产环境中的最佳实践。 winform寄宿&#xff1a; 方便与用户进行交互&#x…

ASP.NET MVC Music Store教程(2):控制器

ASP.NET MVC Music Store教程&#xff08;2)&#xff1a;控制器 转自http://firechun.blog.163.com/blog/static/3180452220110272197830/在传统的Web架构中&#xff0c;URL总是映射到磁盘上的文件。例如&#xff1a;一个类似于“/Products.aspx”或“/Products.php”的URL可能…

C语言:利用泰勒级数计算sinx的值

题目&#xff1a; 代码&#xff1a; #include<stdio.h> #include<math.h> int main(){int sign1,n1;double x3,term,a,sinx0;//scanf("%lf",&x);termx;while(fabs(term)>0.00001){sinxsign*term;nn2;apow(x,n);double b1;for(int i1;i<n;i){…

C++课堂整理--第二章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类&#xff1a;声明语句 指示编译器分配内存&#xff0c;或者提供程序…

我的电脑 III

耳机用的是飞利浦的&#xff0c;和上学那时候的差不多 老的那个睡觉的时候压碎了&#xff0c;我胖了 然后去找音箱 网店&#xff0c;专卖店&#xff0c;电脑城&#xff0c;走了一遍又一遍 没个看的上的 一个月以后&#xff0c;终于决定买飞利浦那个了 白色的&#xff0c;和整个…

mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!

转自&#xff1a;捏造的信仰segmentfault.com/a/1190000022478915基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器&#xff0c;应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询&#xff0c;我们想要从数据库取 1000…

C++程序设计--第三章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1.函数 函数作用 —— 任务划分&#xff1b;代码重用定义形式 类型 函数名 &#xff08; 形式参数表&#xff09;{语句序列}调用形式 函数名&#x…

Linux TCP server系列(5)-select模式下的单进程server

目标&#xff1a; 让服务器退化为单进程模式&#xff0c;但是利用select来提升性能 思路&#xff1a; &#xff08;1&#xff09;服务器 传统的单进程服务器一旦accept了客户端的TCP连接后&#xff0c;就转入客户请求的处理&#xff0c;处理完成后才能再一次的调用…

替换元素_80%的前端会答错的问题:lt;imggt;是什么元素?

前言某天晚上&#xff0c;和几个朋友去撸串&#xff0c;突然就聊到了面试&#xff0c;都在感叹现在的面试题太变态了&#xff0c;其中一个突然很神秘的问我&#xff1a;“你写前端这么久了&#xff0c;那你知道 <img> 是什么元素吗&#xff1f;”于是我结合平时写页面的经…

用指针变量访问数组

一维指针 地址值 a 相当于 & a[ 0 ] a 1 相当于 & a[ 1 ] a 2 相当于 & a[ 2 ] a i 相当于 & a[ i ] 元素值 a [ 0 ] * a a [ 1 ] 相当于 * ( a 1 ) a [ 2 ] 相当于 * ( a 2 ) a [ i ] 相当于 * ( a i ) 二维 用指…

Linux TCP server系列(6)-select模式下的多线程server

目标&#xff1a; 修改上一篇的select模式下的server&#xff0c;让它使用多线程来处理客户端请求&#xff08;多进程的模式已经在上篇中加了注释&#xff09;。 思路&#xff1a; &#xff08;1&#xff09;服务器 我们已经在之前的客户端模型多个并发用户的过程中使用过多线程…

单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...

《Perl-Tk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton》Perl-Tk中有三种不同形式的按钮组件可供选择&#xff0c;它们分别是按钮(Button), 复选按钮(Checkbutton), 和单选按钮(Radiobutton)&#xff0c;如下图所示&#xff1a;这三种按钮看起来是不同的&#…

好奇怪呀后面加什么标点_狗狗吃饭时奇怪的小动作,你知道代表什么吗?做个懂狗的好主人...

狗狗有时候因为一些奇怪的小行为&#xff0c;会让主人觉得很可爱。如果我们希望能够了解狗狗更多一些&#xff0c;那么我们需要透过它们的行为本身&#xff0c;去理解背后所代表的含义&#xff0c;才能和狗狗更亲密的交流。很多狗狗在吃饭的时候&#xff0c;也会表现出一些奇奇…

开机未发现nvidia控制面板_修改这几个选项,就能提升你的开机速度

最近电脑非常卡&#xff0c;有时真的想把它给砸了&#xff0c;慢的自己都受不了&#xff0c;开机几分钟&#xff0c;开机完还要等上好久才能运行软件&#xff0c;都快受不了&#xff0c;要不是看在已经是10前的买的电脑&#xff0c;早就问候产商了&#xff0c;电脑缓慢的开机速…

arcgis mxt模板 创建工具条无法保存_【从零开始学GIS】ArcGIS中的绘图基本操作(二)...

大家好&#xff0c;我是肝教程肝到熊猫眼的三三。本系列教程的发布&#xff0c;受到了很多同学的鼓励&#xff0c;大家在后台或微信上表达出对教程的喜爱&#xff0c;这便是更新教程的最大动力。上回教程讲解了“GIS基本操作”、“创建文档&#xff06;加载数据”、“创建GIS数…

vivado中交织模块_搞定Markdown中的图片,一劳永逸的方法!

经常用markdown写博客的朋友一定都体会过markdown图片的蛋疼之处&#xff0c;并不是说图片的这用引用方式不好&#xff0c;而且图片要放到什么服务器上&#xff1f;以我个人为例&#xff0c;写了一篇markdown&#xff0c;想在不修改任何地方的同时适用于各种平台。刚开始使用ma…

delphi xe2 project菜单怎么没有加组件功能_交互设计:让人困惑的三大交互组件及用法...

本篇文章中&#xff0c;笔者带我们了解了三大交互组件专有名词的用法&#xff0c;并结合实际案例进行了解释说明&#xff0c;与大家分享。希望通过此文能够加深你对交互组件及其用法的理解和分析。最近有很多同学来问一些设计中组件的专业名词&#xff0c;发现大家好像都没有一…

北斗三号b1c频点带宽_北斗三号导航信号的创新设计(一)

《测绘学报》构建与学术的桥梁 拉近与权威的距离一需求与挑战1.1 卫星导航信号的作用与意义卫星导航信号是由导航卫星向地球表面播发的无线电测量信号&#xff0c;承担着传递时空基准信息和实施被动测距两大任务&#xff0c;是卫星导航系统实现三边定位的核心载体。卫星导航信号…