软件授权注册码_授权码授予

2023-11-10

OAuth是一种开放的授权标准,可让客户端代表资源所有者访问受保护的服务器资源。 资源所有者可以是其他客户端或最终用户。 OAuth还可以帮助最终用户授权第三方访问其服务器资源,而无需共享其凭据(例如用户名和密码)。 本系列文章遵循RFC6749中概述的OAuth 2.0授权框架。 可以在Internet工程任务组网站上找到RFC 6749中概述的完整OAuth 2.0授权框架。

授权补助

授权授予是一个凭证,代表可用于访问受保护资源的资源所有者的授权。 客户端使用此凭据来获取访问令牌,并且最终将该访问令牌与访问受保护资源的请求一起发送。 OAuth 2.0定义了四种授权类型:

  1. 授权码
  2. 隐含的
  3. 资源所有者密码凭证
  4. 客户凭证

本系列文章将指导您使用上面列出的每种授予类型,在Java™编程中实现OAuth 2.0客户端。 在第三部分中,我将解释如何实现授权码授予。 本文将详细说明该赠款,并说明可用于与支持此赠款的任何OAuth 2.0兼容服务器进行交互的示例客户端代码。 到本文结尾,您应该对客户端实现有完整的了解,并准备下载示例客户端代码以进行自己的测试。

授权码授予

该授权针对机密客户端进行了优化,用于获取访问令牌和刷新令牌。 这是基于重定向的流程,因此,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互,并且还必须能够(通过重定向)接受来自授权服务器的传入请求。

授权代码授予如图1所示。

图1.授权代码流程

图1所示的流程包括以下步骤:

  • (A)客户端(通常是Web应用程序)通过将资源所有者的用户代理(通常是Web浏览器)定向到授权端点来启动流程。 客户端的请求包括客户端标识符,请求的范围,本地状态和重定向URI。 授权访问(或拒绝访问)后,授权服务器将用户代理(通常是Web浏览器)定向回重定向URI。
  • (B)资源所有者通过用户代理向授权服务器进行身份验证,并授予或拒绝客户端的访问请求。
  • (C)如果资源所有者授予访问权限,则授权服务器使用之前(在请求中或在客户端注册期间)提供的重定向URI将用户代理(通常是Web浏览器)重定向回客户端。 重定向URI包括授权码和客户端之前提供的任何本地状态。
  • (D)客户端通过包括上一步中收到的授权代码,从授权服务器的令牌端点发出访问令牌请求。 发出请求时,客户端使用客户端凭据向授权服务器进行身份验证。 客户端还包括用于获得授权码以进行验证的重定向URI。
  • (E)授权服务器对客户端进行身份验证。 它验证授权码,并确保接收到的重定向URI与步骤(C)中用于重定向客户端的URI匹配。 如果有效,授权服务器将以访问令牌和(可选)刷新令牌进行响应,以防请求离线访问。

授权码请求

授权代码请求对应于图1中描述的步骤(A)和(B)。在步骤(A)中,客户端以application/x-www-form-urlencoded格式向授权服务器发出请求。在清单1中。

清单1.授权代码请求的示例
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com

该请求必须包含以下参数:

  • response_type :必需。 该值必须设置为code
  • client_id :必填。 客户端ID。
  • redirect_uri :必需。 用于用户代理重定向。
  • scope :可选。 访问请求的范围。
  • state :可选。 维持请求和回调之间的状态。

在授权服务器验证了请求之后,服务器将HTTP重定向代码302响应发送回客户端。 该响应还将在http Location标头中包含重定向URI。 在步骤(B)中,客户端必须将用户代理(通常是Web浏览器)重定向到此URI。 此重定向URI通常是一个登录页面,资源所有者可以在其中使用其凭据登录并授予/撤消对客户端请求的访问权限。

授权码回应

授权代码响应如图1的步骤(C)所示。如果资源所有者批准了访问请求,则授权服务器将发布授权代码。 授权服务器将用户代理重定向到步骤(A)中作为请求的一部分提供的重定向URI,并使用application/x-www-form-urlencoded将授权代码包括为重定向URI的查询组件的一部分。格式。

URI参数如下:

  • Code :必填。 授权服务器生成的授权代码。 该代码是临时代码,必须在生成后立即过期。 客户端不得多次使用授权码。 授权服务器应撤消使用相同代码的其他任何请求。 授权代码绑定到客户端标识符和重定向URI。
  • State :必填。 如果客户端的授权代码请求中存在state参数,则必须将此参数设置为从客户端收到的确切值。

访问令牌请求

这对应于图1中的步骤(D)。客户端使用application/x-www-form-urlencoded格式向令牌端点(授权服务器)发出请求,如清单2所示。

清单2.访问令牌请求的示例
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

             grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
             &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom&client_id=c342

访问令牌请求必须设置以下参数:

  • grant_type :必需。 该值必须设置为authorization_code
  • client_id :必填。 客户端ID。
  • client_secret :可选。 秘密。 与授权服务器进行身份验证。
  • code :必填。 从服务器收到的授权码。
  • redirect_uri :必需。 与步骤(A)中发送的相同。

授权服务器验证代码和重定向URI是否有效。 对于机密客户端,授权服务器还使用在请求正文或授权标头中传递的客户端凭据对客户端进行身份验证。

访问令牌响应

这对应于图1中的步骤(E)。如果访问令牌请求有效且被授权,则授权服务器在访问令牌响应中返回访问令牌。 清单3显示了成功响应的示例。

清单3.成功的访问令牌响应的示例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "access_token":"2YotnFZFEjr1zCsicMWpAA",
  "token_type":"Bearer",
  "expires_in":3600,
  "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
  "example_parameter":"example_value"
}

如果请求无效或未授权,则授权服务器返回带有代码的适当错误消息。

刷新访问令牌请求

这是一个可选步骤,如果客户端请求脱机访问并作为访问令牌请求的一部分提供了refresh_token ,则此步骤适用。 访问令牌是临时的,通常在一个小时后过期。 访问令牌过期后,客户端将需要重复身份验证过程,而资源所有者将需要登录并提供授权,以使客户端能够再次提出访问令牌请求。

如果客户端需要刷新访问令牌,而浏览器中不存在资源所有者登录并进行身份验证,则客户端将使用脱机访问。 客户端可以在发出第一个授权码请求时请求脱机访问(请参阅步骤(A))。 在这种方案下,授权服务器除访问令牌外还返回刷新令牌。 刷新令牌是一个长期有效的令牌,除非资源所有者明确将其吊销,否则它不会过期。 每次访问令牌到期时,客户端都可以使用刷新令牌重新生成访问令牌,而资源所有者无需登录并授权访问请求。

客户端使用application/x-www-form-urlencoded格式向令牌端点(授权服务器)发出请求,如清单4所示:

清单4.对令牌端点的请求
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA

请求参数定义如下:

  • grant_type :必需。 该值必须设置为refresh_token
  • refresh_token :必需。 这是从访问令牌请求中较早检索到的。
  • scope :可选。 访问请求的范围。

授权服务器验证刷新令牌并颁发新的访问令牌。

刷新访问令牌响应

如果请求成功,授权服务器将返回一个新的访问令牌。 清单5显示了成功响应的示例。

清单5.刷新访问令牌响应
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "access_token":"2YotnFZFEjr1zCsicMWpAA",
  "token_type":"Bearer",
  "expires_in":3600,
  "example_parameter":"example_value"
}

如果请求无效或未授权,则授权服务器返回带有代码的适当错误消息。

建立

示例Outh2.0客户端是一个动态Web项目。 您可以从Downloads下载<

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件授权注册码_授权码授予 的相关文章

  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 将一个列表的元素除以另一个列表的元素

    我有两个清单 比如说 a 10 20 30 40 50 60 b 30 70 110 正如你所看到的 列表 b 由一个列表的元素总和组成 其中 window 2 b 0 a 0 a 1 10 20 30 etc 如何获得另一个列表 该列表由
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • 是否可以使用 Eclipse 的正则表达式搜索和替换转换为小写?

    我已经尝试过 L 但它似乎不是其语法的一部分 并且它的帮助没有提及任何可用的转换 我知道我可以并且知道如何从命令行执行此操作 但是 是否可以使用 Eclipse 的正则表达式搜索和替换进行大小写转换 您可以分两步完成 首先插入小写字母 那么
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 为什么我们应该在 def __init__(self, n) -> None: 中使用 -> ?

    我们为什么要使用 gt in def init self n gt None 我读了以下摘录来自 PEP 484 https www python org dev peps pep 0484 the meaning of annotatio
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐

  • java中类什么时候被加载

    创建对象实例时 new public class codeblock public static void main String args 创建对象实例时 new 类被加载 AA aa new AA 运行结果 AA的静态代码块被执行 cl
  • mac中查看.ssh文件

    因为一些原因需要重新生成github的ssh Key 但是找不到之前的安装路径的了 好在我是选择默认路径的 因此要找到ssh文件夹下的id rsa pub文件 只需要 打开终端输入 plain view plain copy open ss
  • 【分布式锁】三种分布式锁的实现【原创】

    分布式锁 0x00 概述 0x02 实现方式 0x03 分布式锁 基于数据库 1 实现思想 A 悲观锁 排他锁 B 乐观锁 2 优缺点 0x04 分布式锁 基于Zookeeper 1 实现思想 2 优缺点 0x05 分布式锁 基于Redis
  • Ant之build.xml详解

    Ant之build xml详解 Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它 但只要使用通过Linux系统得读者 应该知道make这个命令 当编译Linux内核及一些软件的源程序时 经常要用这个命令 Make命令其实就是一个
  • 关于&&运算符的机制以及=和>的运算优先级

    今天碰到问题的代码是这样的 最开始以为会输出3 以为 和 gt 的优先级一样 后来查询发现比较运算符的优先级大于赋值运算符 于是觉得输出应该是0 结果输出2 经查询发现是 在判断前一个条件为0后就不会再去判断第二个条件了 以前没见过这个说法
  • 第九届GIS技能应用大赛试题技术文档 -上午

    1 项目概述 1 1 项目要求 如图1 1 1所示为雷尼尔山国家公园 根据题目要求 现有一份雷尼尔山国家公园地形图的一部分扫描图 需要利用该扫描图制作三维模型用来分析和展示 图1 1 1 雷尼尔山国家公园 1 具体任务要求如下 任务一 使扫
  • 递归锁(Recursive Lock)也称为可重入互斥锁(reentrant mutex)

    递归锁 Recursive Lock 也称为可重入互斥锁 reentrant mutex 是互斥锁的一种 同一线程对其多次加锁不会产生死锁 递归锁会使用引用计数机制 以便可以从同一线程多次加锁 解锁 当加锁 解锁次数相等时 锁才可以被其他线
  • response对象设置返回状态_测试开发专题:spring-boot自定义异常返回

    上文测试开发专题 spring boot统一异常捕获我们讨论了java异常以及如何使用Spring Boot捕获异常 但是没有去说捕获异常后该如何进一步处理 这篇文章我们将对这个遗留的问题进行讨论 统一错误响应定义 我们希望在程序发生异常的
  • Linux操作系统之进程间通信—信号量

    文章目录 一 信号量的定义 二 信号量的使用 三 ipcs的使用 一 信号量的定义 信号量是一个特殊的变量 一般取正数值 它的值代表允许访问的资源数目 获取资源时 需要对信号的值进行原子减一 该操作被称为p操作 当信号量值为0时 代表没有资
  • Java复习-20-接口(3)- 代理设计模式

    代理设计模式 Proxy 功能 可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上 代理模式 Proxy Pattern 是一种结构性模式 代理模式为一个对象提供了一个替身 以控制对这个对象的访问 即通过代理对象访问目标目标对象 可
  • Mysql 查询当前时间24小时内的数据

    记录一下mysql查询24小时内的sql语句 where time gt NOW interval 24 hour
  • C++中的内存对齐介绍

    网上有很多介绍字节对齐或数据对齐或内存对齐的文章 虽然名字不一样 但是介绍的内容大致都是相同的 这里以内存对齐相称 注 以下内容主要来自网络 内存对齐 通常也称为数据对齐 是计算机对数据类型合法地址做出了一些限制 要求某种类型对象的地址必须
  • ESP32+Arduino环境搭建教程 合宙ESP32C3

    1 在arduino官网下载安装包并安装 下载地址 https www arduino cc en software 2 安装Arduino对ESP32支持 1 添加ESP32开发板管理器地址 点击文件 gt 首选项 gt 其他开发板管理器
  • Introspector内存溢出的原理解析

    JavaBeans Introspector是一个类 位置在Java bean Introspector 这个类的用途是发现java类是否符合javaBean规范 也就是这个类是不是javabean 具体用法可以参照jdk文档 上面的意思就
  • 常用音频接口:TDM,PDM,I2S,PCM

    折腾 整理 SoC CPU MEDIATEK MT8516详解 期间 看到T8516介绍中包含 麦克风语音输入控制和连接的音频产品中包含 I2Sx2 4 个频道 TDM 最多 8 个频道 和 PDM 输入 2 个频道 等广泛的接口 不太熟悉
  • 中国猎头公司排名 (前十)

    4月3日 平时能够收到不少猎头公司排名评选的邀请 但自己一直怀疑这类排名评选的可行性和公信力 人为因素在这样的评选中占了太大的成分 因为喜欢搜索这个职业 所以我一直是一个谷歌Google的粉丝 Google的成功和深入人心和它坚持自己的 搜
  • hue+oozie并发集群阻塞的调优经历

    hue oozie并发集群阻塞的调优经历 问题描述 使用hue oozie进行数据仓库开发 部署了大量workflow和并发任务 定时晚上集中时间执行时出现任务卡死状态 全部是oozie launcher的job任务 方案一 调大集群资源
  • keras ANN 分类实战

    import pandas as pd import numpy as np from sklearn model selection import train test split from keras utils import np u
  • Javascript: hash tables in javascript

    Copyright 2010 Tim Down Licensed under the Apache License Version 2 0 the License you may not use this file except in co
  • 软件授权注册码_授权码授予

    OAuth是一种开放的授权标准 可让客户端代表资源所有者访问受保护的服务器资源 资源所有者可以是其他客户端或最终用户 OAuth还可以帮助最终用户授权第三方访问其服务器资源 而无需共享其凭据 例如用户名和密码 本系列文章遵循RFC6749中