首页 > 其他分享 >Oauth2协议

Oauth2协议

时间:2024-06-14 18:22:00浏览次数:22  
标签:协议 Oauth2 Client 授权 服务器 权限 资源

Oauth2.0

Oauth2是一种委托协议,你可以通过Oauth2协议授权给某个应用程序,让该应用程序代替你去访问你的某些资源。资源拥有者(你)授权给某个应用,该应用会获得一个token(类似委托书,代表着这个这个应用获取了你的授权,可以代表你),这个应用带着这个token代表你去资源服务器获取你的某些资源。

举个生活中的例子:如果你要买车,车子付钱之后要上牌,但是你有没有时间,4s店提供代办服务。但是4s店代办车牌需要你的完税证明及委托书等证明才能去车管所代办。你需要以委托书的形式授权给4s店,委托4s帮你代办。Oauth2就是办理委托和授权的协议。

最最重要的:Oauth2不是认证协议,没有认证的功能。

最最最重要的是:token中只有你授权的权限。你本身可能有很多权限,你可以只选择一部分权限授权给应用,token代表了你授权的权限。

最最最最重要的是:这种授权时临时的,有时间期限。第三方应用不能永远代表你去访问这些资源。因此,token是临时的,临时授权。

到底什么是Oauth2?

The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an
approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.

Oauth2是个授权框架,它可以使某个第三方引用获取到对某个HTTP服务有限的访问权限。这种权限的获得可以通过编排一个资源拥有者和HTTP服务之间的授权交互流程获得,也可以通过三方应用自己的行为获取权限。
Oauth2协议中涉及到的几种角色:

Resource Owner: 资源拥有者,指用户。

Reosurce Server: 资源服务器,存放Protected Resource.用户的资源在资源服务器上存储保存,使用时需要到资源服务器获取.

Client: 第三方应用(可以认为是某个微服务)。这个应用(服务)想要代表用户去获取资源服务器上用户的一些资源。

User-Agent: 简单认为就是浏览器。

 

 Oauth2的目的就是 让Client能够访问用户在资源服务器上的资源(取得用户的某种权限),并且在这期间不出现安全隐患。这种权限的取得:

  1. 不会让Client知道用户的账号密码

  2. 不会有越权访问,比如资源服务器上有很多资源,但只授权client访问部分资源

  3. 临时授权,授权存在一定期限,期限过去之后就不能访问了。再访问需要再次申请用户的允许。

Oauth2协议的流程:

Client(某个微服务)想要访问Resource Server上的资源,流程如下:

1. Client要获取用户的授权,因此它将Resource Owner 引导至Authorization Server(通过浏览器redirect的方式)

2. 授权服务器向用户展示出权限列表,用户勾选授予Client的权限,并点击授权按钮,将授权结果告知给授权服务器

3. 授权服务器获取到授权信息后,发一个授权码(Authorization Grant,也称为grant_code,授权码代表着用户的授权)并将这个授权码给到Client

4. Client拿到授权码之后,拿着授权码向资源服务器请求获取一个access token(访问码)

5. Client拿着访问码去资源服务器访问它想要获取的资源。

这是Oauth2协议的一般流程。实际上Oauth2有好几种授权流程,后续再说。

 

标签:协议,Oauth2,Client,授权,服务器,权限,资源
From: https://www.cnblogs.com/lucidar/p/18248177

相关文章

  • CAS单点登录:开启OIDC协议(八)
    1.引入依赖<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-oidc</artifactId><version>${cas.version}</version></dependency>2.生成jwks官方提供的用于生产JWK文件工具:https://mkjwk.org/复制......
  • 转换协议字节
     转换协议字节///<summary>///转换协议字节帮助类///</summary>publicclassByteUtil{///<summary>///byte数组转换int///</summary>///<paramname="src"></param>......
  • JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例
    前言 在前两节中我们介绍了UDP数据报套接字编程,但是并没有对UDP进行详细介绍,本节中我们将会详细介绍传输层中的UDP协议。一、什么是UDP? UDP工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,jpg图片等。1.1基本概念: UDP的全称:用户数据报协议(U......
  • 【学习笔记】透视HTTP协议(五):什么是DNS?
     本文是一篇学习笔记,学习的课程是极客时间的《透视HTTP协议》。透视HTTP协议_HTTP_HTTPS-极客时间(geekbang.org)DNS(DomainNameSystem)是域名系统的缩写,它是一个分布式数据库系统,用于将人们易于记忆和理解的域名(如 www.example.com)转换为计算机能够理解和处理的IP地址(如......
  • TCP协议的客户端和服务端的多路复用
    #include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<sys/time.h>#include<sys/select.h> intmain(void){   //1.创建套接字......
  • Modbus协议转Profinet协议网关与气体监测系统配置案例
    一、背景;Modbus协议和Profinet协议作为工业领域常见的两种通讯协议,各自具有一定的特点和应用范围。Modbus转Profinet网关(XD-MDPN100/300)在工业自动化控制系统中,可以将Modbus协议转换为Profinet协议,以实现不同设备之间的数据交换和通讯二、前景;许多现有的工业设备采用Modbus协议进......
  • 流畅的python--第十三章 接口、协议和抽象基类
    面向对象编程全靠接口。在Python中,支撑一个类型的是它提供的方法,也就是接口。在不同的编程语言中,接口的定义和使用方式不尽相同。从Python3.8开始,有4种方式,如图13-1中的类型图所示。这4种方式概述如下。鸭子类型自Python诞生以来默认使用的类型实现方式。从第1......
  • 工业通讯协议(四)- OPCUA
    参考:https://www.opc-router.com/what-is-opc-ua/#:~:text=Inthiscontext%2CthemeaningofUAin,COM%2FDCOMtopurelybinaryTCP%2FIPoralternativelySOAP.https://github.com/OPCFoundation/UA-.NETStandard一.OPC介绍OPC(OLEforProcessControl)协议是一种用于......
  • SSL协议
    SSL协议简介        SSL(SecureSocketsLayer)协议是一种用于网络通信的加密协议,它在传输层提供了加密、认证和数据完整性保护的功能。虽然SSL协议已被TLS(TransportLayerSecurity)协议所取代,但由于历史原因,人们仍然广泛使用"SSL"一词来指代TLS。SSL协议的主要目标是确......
  • 内部网关协议RIP-路由选择协议
    路由信息协议RIP(RoutingInformationProtocol)是内部网关协议IGP中最先得到广泛使用的协议,其相关标准文档为RFC1058。一、RIP基本工作原理RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Ve......