oauth2.0授权码_OAUTH 2.0授权码授予

oauth2.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后的资源拥有者成功验证并允许myfunkyblog.com获得一些megaphotosharing.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

oauth2.0授权码

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

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

相关文章

JJWT签发与验证token

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。 官方文档: https://github.com/jwtk/jjwt 一、…

MySQL数据库创建用户_修改用户_删除用户_设置用户

文章目录创建新用户使用 CREATE USER 语句创建用户创建新用户,并且使用哈希值设置密码创建一个只能在数据库所在主机访问数据库的用户创建一个只能从指定 IP 连接数据库的用户创建一个可以从任意 IP 连接数据库的用户创建一个没有密码的用户在 mysql.user 表中添加用…

ide 日志 乱码_IDE日志分析方法pt。 2

ide 日志 乱码介绍 在第一部分中,我解释了测井分析的理论方法,我认为这对维持工程师是最好的。 该工程师不需要在日志出现时立即对其进行分析,而是专注于对复杂问题的深入分析。 在第二部分中,我将展示一个复杂的模板可以涵盖许多…

MySQL数据库的用户授权_查看权限

文章目录Mysql 的权限分类权限数据的存储每种权限的修改策略和作用范围刷新权限MySQL 提供的操作权限授权语法格式参考示例授予用户拥有某个数据库的全部权限授予用户拥有所有数据库的全部权限授予用户拥有某个数据库的部分权限授予用户拥有某个数据库中的某个表的部分权限授予…

系统微服务签发token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL创建用户报错 -- ERROR 1396 (HY000): Operation CREATE USER failed for ‘user_name‘@‘localhost‘

mysql> CREATE USER lwxlocalhost IDENTIFIED BY 123456; ERROR 1396 (HY000): Operation CREATE USER failed for lwxlocalhostmysql> drop user lwxlocalhost; # 使用drop user语句删除用户,可能是之前删除用户lwx的时候有问题,例如从user表删除…

jdk12源代码文件_JDK 11:轻松取出单文件Java源代码程序

jdk12源代码文件JDK 11 Early Access Builds包含与JEP 330相关的预览功能(“启动单个文件源代码程序”)。 我之前在“ Shebang即将来到Java? ”和“ 针对JDK 11提议的JEP 329和JEP 330 ”,由于JDK 11 Early Access Builds&#x…

网关过滤器验证token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL SHELL 缓存历史命令

在正常情况下,我们在 MySQL SHELL 中输入的历史命令语句,通过上下箭头键可以向前向后查看,但是如果输入的语句中含有密码字段,那么这条命令语句不会被缓存到历史记录中。

java掌握_掌握Java 11的Constantdynamic

java掌握为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中。 简而言之,通过使用invokedynamic ,可以将方法调用的绑定延迟到第…

Mybatis动态代理模式实现CRUD

项目实现的功能 查询所有用户信息 通过Id查询用户信息 添加用户&#xff08;回显主键&#xff09; 修改用户信息 删除用户信息 通过用户名字模糊查询 一、引入依赖和工程结构 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

MySQL撤销(revoke)用户权限

文章目录撤销用户对某个数据库的全部权限撤销用户对某个数据库的部分权限撤销用户对某个数据库的某张表的部分权限撤销用户对任何数据库的任何表的部分权限撤销 WITH GRANT OPTION 权限权限表撤销权限的巨坑撤销语句要和授权语句完全一致权限 USAGE 是无法撤销的数据库 test 的…

无服务器–仅仅是构建现代应用程序的一种方法?

如果搜索“无服务器”&#xff0c;则会发现无服务器是构建现代应用程序的一种新的流行方式。 无服务器真的是新的吗&#xff1f; 无服务器是指您无需担心服务器的概念–无需置备&#xff0c;部署和维护服务器。 显然有服务器&#xff0c;但是您不必考虑或担心它们&#xff0c;…

Mybatis核心配置文件xml详解

<!-- configuration:在dtd约束中? 代表一次或零次 代表一次或多次&#xff08;最少一次&#xff0c;可以多次&#xff09;* 代表零次或多次&#xff08;有没有都可以&#xff09;, :逗号 特定的顺序&#xff08;&#xff09;| :竖杠 任选其一能添加的标签和顺序properties?…

MySQL查询语句后面加上“\G”,提示 ERROR: No query specified

在查询语句后面以 \G 结尾&#xff0c;表示纵向显示每行记录&#xff0c;如下所示&#xff1a; mysql> select * from student\G; *************************** 1. row ***************************id: 00000000000000000001name: liaowenxiongage: 22score: NULLbirthday:…

c++ 嵌套私有类_嵌套类和私有方法

c 嵌套私有类当您在另一个类中有一个类时&#xff0c;他们可以看到彼此的private方法。 在Java开发人员中并不为人所知。 面试过程中的许多候选人说&#xff0c; private是一种可见性&#xff0c;它使代码可以查看成员是否属于同一班级。 这实际上是对的&#xff0c;但更准确地…

Mybatis多参数封装到一个类中模糊查询

1.创建QueryValueObject实体类 package com.william.domain;import org.omg.PortableInterceptor.USER_EXCEPTION;/*** author &#xff1a;lijunxuan* date &#xff1a;Created in 2019/7/12 12:09* description &#xff1a;* version: 1.0*/ public class QueryValueObje…

MySQL数据库的权限表

文章目录user 表db 表tables_priv 表columns_priv表MySQL 数据库中与权限相关的表&#xff1a;user、db、tables_priv、columns_priv。 user 表 mysql> select * from mysql.user\G *************************** 1. row ***************************Host: localhostUser: …

jakarta ee_MicroProfile在Jakarta EE时代的作用

jakarta ee自创建以来&#xff0c;MicroProfile赢得了广泛的关注&#xff0c;并制定了各种规格。 最初&#xff0c;它的创建是为了在多个供应商的推动下&#xff0c;以更快的速度推进微服务世界的企业Java。 现在&#xff0c;随着在Eclipse Foundation下将Java EE转换为Jakarta…

Linux系统下MySQL数据库的超级管理员root的密码忘记/忘记密码怎么办?

文章目录方法一方法二方法三方法一 1.添加登录跳过权限检查配置 修改 /etc/my.cnf 文件&#xff0c;在 [mysqld] 配置节点添加 skip-grant-tables 配置 [mysqld] skip-grant-tables2.重新启动mysql服务 service mysqld restart3.修改密码 添加登录跳过权限检查配置后&#x…