微服务下如何选择OAuth2授权之四种模式

news/2024/11/1 13:27:53/

OAuth2.0是一个授权框架,他规定了客户从授权服务器获取令牌Token的规则。

一、OAuth2的组成部分

 1.OAuth2.0需要解决的问题

要理解OAuth2.0,先要知道为什么会有这个东西产生,或者说他能帮我们解决什么问题,其实简单说他就是帮我们解决了访问安全问题。先看如下的一张图:

 

图片显示了我们没有引入任何安全机制情况下的资源访问过程,可以看到正常的用户和恶意的用户都可以通过向资源服务器的接口发送请求获得用户数据。显然恶意用户不该获取数据,他是非法获得,这个情况不应该被允许,需要一种机制保护用户数据。

2.OAuth2.0主要角色

OAuth2.0包含了资源拥有者,授权服务器,客户应用,授权服务器,资源服务器。
客户应用:通常是一个 WebWeb 或者无线应用,它需要访问用户的。
资源服务器:是一个 webweb 站点 或者 web service web service web service web service API ,用户的受保护。
授权服务器:在客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token。
资源拥有者:资源的拥有人,想要分享某些资源给第三方应用。

 


除了以上的四种角色,我们还要掌握以下三个概念:
客户凭证:客户的 clientId 和密码用于认证客户。
令牌:授权服务器在接收到客户请求后,颁发的访问令牌。
作用域:客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)。

3.OAuth2.0令牌类型

1)授权码(Authorization Code Token),仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌
2)刷新令牌(Refresh Token),用于去授权服务器获取一个新的访问令牌
3)访问令牌(Access Token),这是OAuth令牌类型中最核心的一个,用于代表一个用户或服务直接去访问受保护的资源
4)Bearer Token,不管谁拿到Token都可以访问资源,像现钞
5)Proof of Possession(PoP) Token,可以校验client是否对Token有明确的拥有权

4.OAuth2.0的授权机制

上面提到了需要提供一种机制来保护数据,OAuth2.0提供的就是一种授权机制,就是说用户要访问资源必须先通过授权服务器授权拿到Access Token(访问授权),他拿着这个Access Token才能去资源服务器去要他想要的数据,示意图如下:

 

这里看到我们引入了一个授权服务器,这个授权服务器就是专门负责颁发Access Token的,客户应用需要从授权服务器中获得Access Token,获得后再向资源服务器去获取数据,请求中包含了Token一起发到资源服务器,资源服务器首先要验证这个Token是否合法,如果合法再返回数据给客户应用。
上图中红色圈圈圈起来的就是OAuth2.0框架协议工作的地方,他规定了客户应用如何获取Access Token,以及如何使用Token的整个过程。

5.Spring Security OAuth2.0架构

 

其中核心的授权服务器包括了授权端点,令牌端点,校验端点,注销端点,如下图所示:

 

二、如何选择OAuth2.0的授权模式

授权码模式有一个基本的选择流程,如下图

 

OAuth2.0的四种授权模式的实现方式

OAuth2.0中规定了多种授权模式,各种模式实现的复杂程度和安全系数不一样,我们先分别看一下四种授权模式:
1)授权码(Authrization Code)模式:
基本流程是先通过前端渠道客户获取授权码,然后通过后端渠道,客户使用Authrization Code去交换Access Token和可选的Refresh Token,这种模式是最安全的模式,因为令牌不会通过user-agent去传递,完整的过程如下图:

 

授权码模式的优点是比较安全,他可以有token过期时间,而且上面的第四和第五步都是在服务器之间的访问,很难被截获,用户信息也存在服务端,这样就保证了他的安全性。他的缺点是需要进行多次请求才能访问到资源。
授权码模式假定资源拥有者和客户不在一台设备上,他拥有高安全性的保障,目前市面上主流的第三方认证都是采用这种模式。

2)隐式/简化(Implicit)模式
基本流程是Access Token直接通过前端渠道从授权服务器返回,完整的过程如下图:

 


简化模式的优点是简单,缺点是容易受到安全攻击,通常是没有refresh_token没法更新token,token有暴露的风险。
简化模式假定资源拥有者和客户在相同的设备上,适合公开的浏览器单页应用,比较适合用作问卷调查,评论这一类系统中采用这种模式。

3)密码(Resource Owner Password)模式
基本流程是使用用户名/密码作为授权方式从授权服务器上获取Access Token,而且一般不支持refresh token,完整的过程如下图:

 


密码模式假定资源拥有者和客户在相同的设备上,适合一般的需要用户名/密码登录的一些桌面App应用。通常情况下,当使用的桌面应用或者App是自家开发的时候可以用这种模式,安全是受控的。

4)客户端(Client)模式
基本流程是通过后端渠道去获取一个Access Token,因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码和证书,完整的过程如下图:

 

客户端模式适合用作服务器间通信场景。



 


http://www.ppmy.cn/news/222298.html

相关文章

华硕服务器主板型号命名规则,常见主板命名规则

最近因为想要组装 NAS,所以简单的了解了一下主板的命名规则。这里将总结一下。 多数厂家遵循一般的规律: 处理器类型 芯片组 芯片类型 基本后缀 芯片组名字由芯片厂商决定,AMD 在发布锐龙后抢了英特尔的命名方式,从低到高端 A320,…

华擎计算机主板配置,组装的华擎主板win10改win7系统及bios设置教程

华擎主板品牌就不用多说了,有很多用户用华擎主板组装的电脑,遇到各种想win10改win7的问题,华擎100芯片组以上的主板在win10改win7的时候有很多问题,有的安装后引导不了,有的安装后USB不能使用,要采用win7新机型,且要关闭“安全启动”和开启“兼容模式”有的机器自带nvme…

vue3实现高德地图多点标注(so easy)

vue3实现高德地图多点标注(so easy) 前言思路清晰,抽丝剥茧必要的准备工作最简单的部分处理数据之前(最关键的思路)效果完整代码 前言 非常感谢你能打开这篇博客,我想你一定是遇到了地图多点标注有关的问题…

单片机的系统移植

目录 一、uboot概述 Bootloader Bootloader基本功能: 二、SD卡启动盘制作 三、uboot的使用 3.1uboot模式 自启动模式 交互模式 3.2uboot帮助命令 3.3uboot环境变量命令 3.4常用环境变量 3.5网络传输命令 3.6u-boot访问存储器命令 3.7 u-boot自启动环境变量&#xff…

【图像任务】Transformer系列.2

两篇改进Transformer结构的论文:MAN(arXiv2022),ScalableViT(ECCV2022). Multi-Scale Attention Network for Single Image Super-Resolution, arXiv2022 解读:【ARIXV2209】Multi-Scale Atten…

帮你梳理了一份前端知识架构图

列一份前端知识架构图 在上一篇文章中,我们简要地总结了前端的学习路径与方法,我们提到的第一个学习方法就是:建立知识框架。那么,今天我们就一起来列一份前端的知识框架图。 在开始列框架之前,我想先来谈谈我们的目…

亚马逊网络服务教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 亚马逊AWS(Amazon Web Services (AWS) )是亚马逊提供的是全球最全面、应用最广泛的云平台, 从全球数据中心提供超过 200 项功能齐全的服务。 数百万客户(包括增长最快速的初创公司、最大型企业和主要的政府机构)都在使用 AWS 来降低…

centos7下svnserve方式部署subversion/SVN服务端(实操)

一般来说,subversion服务器可以用两种方式架设: 一种是基于svnserve,svnserve作为服务端; 一种是基于Apache,用apache作为服务端。 这里采用第一种方式部署。 执行如下命令,安装SVN。 yum install sub…