OAUTH 2.0授权码授予

OAuth 2.0提供了许多安全性流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据。

在此博客中,我们将介绍OAuth 2.0授权:授权代码授权。

首先,有许多定义:

  • 客户端 :用户当前正在与之交互的应用程序。 例如,我们假设一个虚构的时髦博客网站:www.myfunkyblog.com。 客户端希望与另一个应用程序通信并从那里检索有关用户的信息。 例如,他们最喜欢的照片! 让我们假设虚拟的megaphotosharing.com作为服务   客户希望访问。
  • 客户ID :这是标识客户的ID。 可以在Web URL等中公开传递
  • 客户机密ID只有客户知道的机密ID。 这保留在服务器端,将用于对要访问的应用程序的请求中。 它不能在Web URL中传递。
  • 资源拥有者 :这通常是人 ,谁在使用客户端应用程序。 资源所有者在客户端( myfunkyblog.com )希望访问的另一个应用程序(例如megaphotosharing.com)中具有数据。 目的是在无需资源所有者(也就是人类)将其megaphotosharing.com密码传递到myfunkyblog.com的情况下,促进共享。 注意:资源所有者不必是人类,但根据OAuth规范 ,有趣的是,资源所有者是人类时,也可以称为最终用户。
  • 资源服务器 :托管客户端感兴趣的资源所有者的受保护资源。因此,这是megaphotosharing.com服务器,其中具有myfunkyblog.com感兴趣的资源所有者的照片。
  • 授权服务器 :在资源所有者成功通过身份验证并允许myfunkyblog.com获得其megaphotosharing.com的 一部分之后,向myfunkyblog.com发行令牌的服务器。 有时,授权服务器和资源服务器实际上是相同的,但不必相同。
  • 访问令牌myfunkyblog.com授权服务器提供的一种特殊类型的令牌,使megaphotosharing.com可以访问受保护的资源。 它将包含范围,生存期和其他访问属性。

用例

因此,用例是客户端( myfunkyblog.com )希望从另一个应用程序megaphotosharing.com访问有关资源所有者(人)的信息。

客户注册

客户首先要做的是向服务( megaphotosharing.com )注册,并提供其名称,网站等。该服务将返回一个秘密的客户代码。

客户将其保密,并负责确保只有其知道。 通常,它将加密并将其持久化在后端的客户端中。 该服务还将收到一个客户端ID。 与客户机密不同,这是公开的,可以在URL等中传递。

好吧,现在是实际流量。

用户正在myfunkyblog.com上浏览,并访问myfunkyblog.com想要了解最终用户最喜欢的照片的网站的一部分。

最终用户将看到一个弹出屏幕。

该网址:

https://megaphotosharing.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL≻ope=read

该网址的关键部分:

  • megaphotosharing.com:这是授权服务器的域
  • response_type = code:启用客户端所需的参数将通知授权服务器所需的授予类型。 一个替代值是“令牌”,用于隐式流。 “代码”表示客户端需要授权码 ,该授权码将在资源所有者登录后返回。该授权码将在客户端的后续请求中使用。
  • client_id:必需参数,用于标识客户端。 请记住,这是公开的
    可以在Web浏览器之间传递。
  • redirect_uri:这是一个可选参数。 它使客户端可以动态指定身份验证服务器应重定向到的URL。 在某些流程中,这是不需要的,因为只有一个重定向URI,并且它在客户端注册期间由客户端向服务注册。
  • 作用域:这是一个可选参数。 它指定应用程序正在请求的访问级别。 在这种情况下,这只是读取。 身份验证服务器使用它来通知用户/资源所有者客户端正在尝试执行的操作。

然后,用户登录megaphotosharing.com,告诉用户客户端要做什么。 如果用户选择“确定”,则megaphotosharing.com将重定向到传递的重定向URI。

https://myfunkyblog.com/callback?code=212132kjhkhj

注意客户端ID是如何通过URL 在Web上传递 并将授权代码通过网络传回

然后,客户端使用返回的授权代码,其客户端ID,客户端密码和授予类型来向服务器发送POST请求以获取访问令牌。 这一切都发生在后端。

https://megaphotosharing.com/v1/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code= 212132kjhkhj&redirect_uri=CALLBACK_URL

笔记:

  • 客户ID客户机密标识客户。 这是一个后端请求,因此可以传递client_secret(显然不会传递给浏览器或从浏览器传递)。
  • grant_type:必须将其设置为authorisation_code。 因为它表示授权码授予。 请记住,授予用于指示客户端正在使用的流(服务器也可以使用哪些类型的可用流)。 如果客户端正在使用“客户端证书授予”,则该值为:“ client_credentials”。 如果客户端使用“资源所有者密码凭据授予”,则该值为“密码”。
  • 代码: 212132kjhkhj –实际授权码,是从授权服务器发出的初始授权请求中返回的内容。 这是必需的。
  • redirect_uri:如果redirect_uri包含在授权请求中,则该值必须与该请求中使用的值相同。

客户端然后接收回访问令牌。 像这样:

{"access_token":"ACCESS_TOKEN","token_type":"bearer","expires_in":2592000,"refresh_token":"REFRESH_TOKEN","scope":"read","uid":1001013121222}

现在它将使用它来访问某些资源所有者的资源数据。

那有什么大不了的?

  • 对于用户不必告诉一个网站另一个网站的密码来说,显然有很大的优势。
  • 减少用户需要记住的密码数量
  • 通过允许不同的应用程序相互通信,可以提供更丰富的网站。

人们为什么会感到困惑?

人们发现OAuth 2.0令人困惑的原因有很多。

  • 有一些不同的流程或赠款。 授权码授予只是其中之一。 有时,当您在Google上搜索OAuth 2.0的说明时,会得到针对不同补助金的说明,而没有弄清楚到底是什么还是没有解释。 因此,为什么要在标题中添加授权码授予。
  • 术语。 我只为自己说话。 但是,如果我快速阅读,我可能会:
    • 将“客户”与最终用户混淆
  • 一致。 许多地方都实现了OAuth 2.0或与OAuth非常相似的东西,但是在此过程中它们的引用方式有所不同。 例如,转到quora.com,然后尝试登录google。 您将被带到:
    https://accounts.google.com/signin/oauth/oauthchooseaccount?client_id=917071888555.apps.googleusercontent.com&as=rdWeinbqWJbt6ChoW2f3Fg&destination=https%3A%2F%2Fwww.quora.com≈proval_state=!ChRyQlhnbEYzai1xQTliNlNmTEVmNRIfZ3doM2hlRVIycGdiMEVBN1JaNXdOM085MERXLVVCWQ%E2%88%99ANKMe1QAAAAAW2i2to0SOyO2_w3k3O4gjwUKQLGNmZ2h&oauthgdpr=1&xsrfsig=AHgIfE8EzSxvWfzyxou0dwLDxv4GhD6e5g&flowName=GeneralOAuthFlow

    该URL中没有response_type。

  • OAuth是授权规范。 它通常与身份验证规范一起使用,例如Open Connect,但这实际上是一个单独的规范。

翻译自: https://www.javacodegeeks.com/2018/08/oauth-authorisation-code-grant.html

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

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

相关文章

什么是通信卫星有效载荷(payload)

卫星一般都是由两大部分组成,即有效载荷平台。 有效载荷是指卫星上用于直接实现卫星的自用目的或科研任务的仪器设备,如遥感卫星上使用的照相机,通信卫星上使用的通信转发器和通信天线等,按卫星的各种用途包括:通信转发…

c语言open参数,ifstream :: open()的C类型参数

我必须使用哪种类型的文件名作为ifstream.open()的参数?int main(int argc, char *argv[]) {string x,y,file;string file argv[1];ifstream in;in.open(file);in >> x;in >> y;...使用此代码,我收到以下错误:main.cpp|20|error: no matchi…

单播、广播、组播(多播)

当前的网络中有三种通讯模式:单播、广播、组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。 一、单播(Unicast) 主机之间“一对一”的通讯模式,网络中的交换机和路由器对数…

c语言错误re,c语言malloc之后再realloc的有关问题

C/C code#include #include #include "../Status.h"#define STACK_INIT_SIZE 5 //堆栈初始大小#define STACKINCREMENT 5 //堆栈满之后再增加的大小typedef char *stackelem;typedef struct{stackelem *base,*top;int stacksize;}sqstack;/*------堆栈基本操作------…

struts2面试问题_Struts2面试问答

struts2面试问题Struts2是用Java开发Web应用程序的著名框架之一。 最近,我写了很多Struts2教程 ,在这篇文章中,我列出了一些重要的Struts2面试问题以及答案,以帮助您进行面试。 什么是Struts2? Struts1和Struts2之间…

什么是Mesh网络

网络间的通信原理 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字&#xff0…

C语言按下列公式计算 求A20的值,2011年全国计算机二级C语言模拟试题及答案(10)...

一、 单项选择题(共30分,每题1分)1. 下列不正确的转义字符是( )A.\\B.\’C.074D.\02. 不是C语言提供的合法关键字是( )A.switchB.cherC.caseD.default3.正确的…

根据谁创建资源授权资源

我的一位同事向我提出了一个关于StackOverflow的有趣问题,并由于我在Spring方面的经验,建议我回答一个很好的问题。 问题是:“ 如何基于使用注释在REST中创建资源的用户来授权特定资源 。” 要点是: 我想做的是创建一个名为Aut…

组播详解

本文转自:http://liuqz926.blog.163.com/blog/static/13448936220091121104233491/ 组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机,是一种一对多的通讯方式。 IP组播的好处、优势 组播协议与现在广泛使用的单播…

ccf2017除法C语言,CCF考试——201709-5除法

概要问题描述小葱喜欢除法,所以他给了你N个数a1, a2, ⋯, aN,并且希望你执行M次操作,每次操作可能有以下两种:给你三个数l, r, v,你需要将al, al1, ⋯, ar之间所有v的倍数除以v。给你两个数l, r,你需要回答…

c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法

我正在寻找一种更快的方法来应用一个自定义函数到一个图像,我用来删除蓝色背景。我有一个函数可以计算出每个像素与背景中蓝色的距离。带有循环的原始代码如下所示:def dist_to_blue(pix):rdist 76 - pix[0]gdist 150 - pix[1]bdist 240 - pix[2]retu…

netbeans7.4_NetBeans 7.4的本机Java打包

netbeans7.4成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”,在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下…

斯坦纳点/树、泰森多边形

斯坦纳点 斯坦纳点别名正等角中心、费尔马点、斯坦纳点 在三角形的三边各向其外侧作等边三角形,这三个等边三角形的外接圆交于一点T,该点T即称为托里拆利点(Torricelli’s point ),而三个等边三角形的外接圆称为托里拆…

c语言如何将程序保存在文件,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

FXRibbon 1.2版发布

这次,有所不同。 Microsoft对FXRibbon的更新,就像Java的功能区控件(JavaFX)一样 。 在发出使FXRibbon做好更好的准备以将其更新到Java 9以及更高版本的要求之后,我借此机会还添加了一些功能,进行了一些美学…

路由和交换

路由和交换 网络的工作方式是使用两种设备:交换机和路由器,来将计算机与外围设备连接起来。这两种工具使连接到网络上的设备之间以及其它网络相互通信。 虽然路由器和交换机看起来很像,但是它们在网络中的功能却截然不同: 交换机…

c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇

用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷)借助游戏内容分析贪吃蛇所需的功能主要包括这几块:移动光标模块打印地图模块和基本规则信息读取最高分文件打印初始蛇模块打印时给予蛇的初始移动方向产生食物模块1)、保证食物在地图内产生2)、保…

用普罗米修斯和格拉法纳乐器来刺豪猪

Adam Bien的Porcupine库使配置用作应用程序隔板的专用执行程序服务变得容易。 我创建了一个扩展,通过MicroProfile Metrics公开了豪猪统计信息。 我们还可以通过Prometheus和Grafana仪表板使仪器可见。 进行此扩展的原因是我们希望对Porcupine线程池的检测进行简单…

三层网络架构

三层网络架构 数据中心网络是连接数据中心大规模服务器进行大型分布式计算的桥梁。 传统数据中心网络普遍采用树型拓扑方案. 典型的拓扑由三层交换机互联构成,分别是接入层交换机、汇聚层交换机和核心层交换机。Cisco称之为:分级的互连网络模…