oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新

1.简介

在本教程中,我们将了解OAuth2令牌身份验证 ,以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌,该令牌随后可用于访问服务器上的授权API(在OAuth术语中仅是受保护的资源)。

使用基于令牌的身份验证,通过与服务器的每次交互共享有效的访问令牌,用户/应用程序可以在特定时间段内访问受保护的资源。

2.令牌认证中涉及的事件

使用令牌身份验证,所涉及的事件已在下图中清晰地描述了–

  1. 客户端应用程序首先从用户(资源所有者)请求授权授权,因为我们经常会看到弹出授权或拒绝访问其他应用程序数据的授权弹出窗口。 例如,Goibibo要求从您的Facebook帐户访问朋友。
  2. 一旦用户通过在弹出窗口中单击“授权”进行授权 ,客户端应用程序(Goibibo)就会收到授权授权。
  3. 然后,客户端应用程序(Goibibo)向授权服务器(Facebook)请求访问令牌以及其自身的身份和在上一步中收到的授权授权。
  4. 如果客户端应用程序已通过身份验证,并且发现授权授予有效,那么授权服务器(由Facebook)将向客户端应用程序(Goibibo)提供/发出访问令牌。
  5. 然后,客户端应用程序(Goibibo)通过随后将访问令牌传递给资源服务器(由Facebook)来访问受保护的资源(来自Facebook应用程序的朋友),直到令牌在指定的时间段后过期。

3. OAuth2角色

以下列出了OAuth实现中的委托角色–

    1. 资源所有者 –能够授予对受保护资源访问权限的实体。 如果您登录Goibibo,并且希望通过您的Facebook帐户访问朋友,则您是资源所有者,需要提供授权授权。
    2. 资源服务器 –托管受保护资源的服务器(Facebook),可以使用访问令牌接受和响应受保护资源的请求。 这意味着好友列表是服务器(Facebook)上托管的资源之一,可供其他第三方应用程序(Goibibo)访问。
    3. 客户端 –代表资源所有者(用户)并获得其授权的受保护资源请求的应用程序(Goibibo)。 我们将所有此类授权授予定义为上下文–
    4. 这意味着Gobibo作为客户端应用程序可以访问资源服务器(Facebook)上的管理好友列表。
    5. 授权服务器 –根据资源拥有者(用户)接收到的客户端应用程序的身份和授权授予向客户端应用程序提供访问令牌的服务器

4.授权补助

OAuth2提供四种类型的授权授予-

4.1授权码

  • 在服务器端应用程序中使用,因此维护了双方的隐私。
  • 最常见的。
  • 基于重定向的流。
  • 用户授权请求通过用户代理(Web浏览器)路由,并且客户端应用程序必须具有足够的能力与用户代理进行交互,并从另一端的授权服务器接收授权代码。

4.2隐式

  • 有点类似于授权码授予类型。
  • 更常用于移动应用程序和Web应用程序。
  • 在客户端,由于授权代码在移交给客户端应用程序之前与用户代理一起存储在本地,因此存在隐私风险。 这可以公开给用户设备上的其他应用程序。
  • 不支持刷新令牌。

4.3资源所有者密码凭证

  • 在受信任的应用程序之间使用。
  • 用户(资源所有者)直接与客户端应用程序共享凭据,客户端应用程序在成功验证用户凭据并进一步授权用户访问服务器上的有限资源后,请求授权服务器返回访问令牌。
  • 这是我们将用于演示应用程序的授权授予类型。

4.4客户凭证

  • 当应用程序需要访问其自己的服务帐户段时使用,只有在该服务帐户段的控制下它才能获取资源。
  • 因此,同一应用程序可能还有其他受信任的机密客户端,它们拥有自己的应用程序个人服务帐户,并且可能在其控制下拥有不同的受保护资源。
  • 应用程序通过将其凭据,客户端ID和客户端密钥发送到授权服务器来请求访问令牌。

5.令牌存储

涉及的另一个重要组件是令牌存储,它定义了如何存储生成的令牌。 默认存储区是内存中的实现 ,但是也可以使用其他一些实现,可以根据需要使用它们–

  1. InMemoryTokenStore –令牌存储在服务器内存中,因此存在授权服务器重新启动时丢失令牌的风险。
  2. JwtTokenStore –所有授权和访问授权数据都编码到令牌本身中,并且此类令牌不会在任何地方持久化。 此类令牌使用解码器即时进行验证,并且依赖于JwtAccessTokenConverter
  3. JdbcTokenStore –令牌数据存储在关系数据库中。 使用此令牌存储,可以安全地重新启动授权服务器。 令牌也可以在服务器之间轻松共享,并且可以被吊销。 注意,要使用JdbcTokenStore,我们将在类路径中需要“ spring-jdbc”依赖项。

6.刷新令牌流

一旦访问令牌在设计的时间段(根据下面的示例为119)后过期,我们可以使用refresh token重新生成一个新的有效访问令牌 。 发出原始访问令牌时会附带刷新令牌,如下所示–

{  "access_token":"04f12761-501b-415b-8941-52bce532ce60","token_type":"bearer","refresh_token":"fc348b4f-de62-4523-b808-9935b1f2e46f","expires_in":119
}

单击此处导航到官方OAuth2文档

翻译自: https://www.javacodegeeks.com/2017/09/understanding-oauth2-token-authentication.html

oauth2令牌刷新

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

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

相关文章

整型数组 判断 java,给定一个整数数组,判断其中是否有3个数和为N

借助集合将复杂度降到n2,但耗时还是比较长。 import java.util.HashMap;import java.util.HashSet;import java.util.Scanner;/*** Author: coderjjp* Date: 2020-05-07 8:40* Description:给定一个整数数组,判断其中是否有3个数和为N* version: 1.0*/public class …

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP ( Java Simple Argument Parser )2.1是本系列文章的第二十篇,重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因:“我在Internet上找到了多个解析器,所有解析器都处理了开关,但是没…

QPW 行政区划字典表(td_area)

行政区划字典表 CREATE TABLE td_area (area_code varchar(10) NOT NULL COMMENT 区域编码,area_name varchar(50) DEFAULT NULL COMMENT 区域名称,area_fullName varchar(300) DEFAULT NULL COMMENT 区域全称,is_hot tinyint(2) DEFAULT 0 COMMENT 是否热门, # 0-否&#xff…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input()函数 此功能用于获取用户输入。 (调用1)input后,程序将立即暂停并等待用户输入。在用户完成内容输入后,单击Enter,程序将继续向下执行。 例如: input() (2&#x…

Linux 命令之 lsusb -- 显示本机的USB设备列表信息

文章目录命令介绍常用选项命令示例(一)显示 USB 设备详细信息命令介绍 lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。 lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。 语法格式:lsusb [选项…

ftp限流java,FTP流量限制的方法

一般来说,下载都是通过FTP来实现的,这样简单的采用ACLs就可以实现的。不过这样存在一个问题,就是原来正常的网络访问也给禁止了,无法继续工作,另外,还有大量的DOWNLOAD不通过FTP,而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外,还提供了指向基于Javadoc的API文档 ,JAR文件,ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景:第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差,主要表现在一些…

Linux 命令之 lspci -- 显示当前设备所有PCI总线信息

文章目录命令介绍常用选项命令示例(一)罗列 PCI 设备命令介绍 lspci命令用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 现在主流设备如网卡储存等都采用PCI总线 常用选项 选项说明-n以数字方式显示PCI厂商和设备代码-…

arm java 性能怎么样,ARM v6上使用java的Number to String转换性能

我在ARM v6处理器上运行Java软件.这个程序的性质要求我将一些数字(int或float)转换为String.处理器运行速度为850Mhz. Java Runtime是OpenJDK Zero VM 1.7.0_21-b02.我并不期待这里有坚如磐石的表演,但我希望能比我在下面的代码片段中看到的更有效.long time1, time2;float[] s…

java rop_Java命令行界面(第23部分):Rop

java ropRop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出:“ Rop的设计目的是最小化同时方便,并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中有关解析Java命令行参数的系列文章中的第23部分&#xf…

python2打开文件_关于python:何时以二进制模式打开文件(b)?

我注意到在文档中他们总是用wb打开一个CSV文件。 为什么b? 我知道b代表二进制模式,但是你什么时候使用二进制模式(我猜想CSV文件不是二进制模式)。 如果相关我是从arcpy.da.SearchCursor()查询的结果写入CSV 编辑:根据这个答案注意到wb用于编…

Linux 命令之 dmidecode -- 显示机器的DMI信息

文章目录命令介绍常用选项(一)Valid string keywords are(二)Valid type keywords are(三)type全部编码列表命令示例示例1,-d 后面跟任何东西,输出内容都相同,奇葩&#…

java 接口 私有_Java 9:好的,坏的和私有的接口方法

java 接口 私有Java 9 是在几周前发布的。 查看发行说明 ,其中包含许多有趣的功能。 不过,我觉得并非一切都是不如Oracle和Java行家似乎图片吧 。 我看到了Java世界中的三个趋势,分别是好,坏和丑陋。 让我们从好的开始。 Birdman…

java群面自我介绍,腾讯群面,自我介绍很重要

我面试时间是十一点,但是一直等到十二点多才开始,去了以后先要填一张表,贴照片,内容差不多就是我们自己简历上的,然后再群面的时候交给面试官。我们那个小组是六个人,在一个房间里,面试官先让我…

python卸载module_Python学习笔记

拖了一整年终于开始学习Python编程。为了逼自己快速上路,强行要求自己本学期的两门课程全部的coding作业用Python完成。 一门机器学习(computational Stats),一门Jeff WU 大佬的实验设计与分析(DOE)。即使R…

Linux 命令之 uname -- 显示系统/主机的相关信息

文章目录一、命令介绍二、常用选项三、命令示例(一)显示系统主机名、内核版本号、CPU类型等信息一、命令介绍 uname 命令的英文全称即“Unix name”。用于显示系统相关信息,比如主机名、内核版本号、硬件架构等。如果未指定任何选项&#xf…

json api_JSON模式在构建和部署API中的作用

json api什么是JSON模式 ? 它提供了一种描述任何JSON值的结构和属性的彻底方法。 在记录对任何JSON API的请求和响应时,它非常有用。 本文将探讨其在API的软件开发周期中的作用。 记录JSON响应格式 定义数据架构的最明显的用例也许是在记录API响应的结构…

java 中允许键重复的,二叉搜索树的定义是否允许重复键?

许多算法将指定排除重复项 . 例如&#xff0c;MIT算法书中的示例算法通常提供没有重复的示例 . 实现重复(在节点上或在一个特定方向上作为列表)是相当简单的 . )大多数(我见过)将左边的孩子指定为<&#xff0c;将右边的孩子指定为> . 实际上&#xff0c;允许右子节点或左…

mlp神经网络_白天鹅黑天鹅灰天鹅?卷积神经网络帮你搞定识别

全文共3014字&#xff0c;预计学习时长6分钟本文将通过一系列的天鹅图片来解释卷积神经网络&#xff08;CNN&#xff09;的概念&#xff0c;并使用CNN在常规多层感知器神经网络上处理图像。图像分析假设我们要创建一个能够识别图像中的天鹅的神经网络模型。天鹅具有某些特征&am…