1.认识OAuth2.0

简介: OAuth2.0是开放授权标准,允许第三方应用在不获取用户账号密码的前提下,通过令牌安全访问用户资源。常见于打印照片、第三方登录等场景,支持授权码、简化、密码及客户端四种模式,广泛用于服务间资源共享与单点登录。

1.什么是OAuth2.0
先说OAuth,OAuth是Open Authorization的简写。 OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与 密码就可以申请获得该用户资源的授权,因此OAuth是安全的。
OAuth2.0是OAuth协议的延续版本,但不向前兼容(即完全废止了OAuth1.0)。
2.OAuth2.0使用场景
假设,A网站是一个打印照片的网站,B网站是一个存储照片的网站,二者原本毫无关联。
如果一个用户想使用A网站打印自己存储在B网站的照片,那么A网站就需要使用B网站的照片资源才行。 按照传统的思考模式,我们需要A网站具有登录B网站的用户名和密码才行,但是有OAuth2后,只需要A网站获取到使用B网站照片资源的一个通行令牌即可!这个令牌无需具备操作B网站所有资源的权限,也无需永久有效,只要满足A网站打印照片需求即可。
这么听来,是不是有点像单点登录?千万不要混淆概念!单点登录是用户一次登录,自己可以操作其 他关联的服务资源。OAuth2则是用户给一个系统授权,可以直接操作其他系统资源的一种方式。
总结一句:SpringSecurity的OAuth2可以做服务之间资源共享,也可以实现单点登录!
3.OAuth2.0四种授权模式
针对上面的获取照片,我们结合下图进行详细展开

B服务[存储照片

B服务认证服务

A服务认证服务

A服务[打印照片]

B服务资源服务

A服务客户端


授权码模式
流程
说明:【A服务客户端】需要用到【B服务资源服务】中的资源
第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备 【B服务认证服务】返回授权码使用。
第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也就是说用户要事先具有B服务的使用权限。
第三步:【B服务认证服务】生成授权码,授权码将通过第一步提供的回调地址,返回给【A服务客户端】。 注意这个授权码并非通行【B服务资源服务】的通行凭证。
第四步:【A服务认证服务】携带上一步得到的授权码向【B服务认证服务】发送请求,获取通行凭证token。
第五步:【B服务认证服务】给【A服务认证服务】返回令牌token和更新令牌refresh token。
场景
授权码模式是OAuth2中最安全最完善的一种模式,应用场景最广泛,可以实现服务之间的调用,常见的微信,QQ等第三方登录也可采用这种方式实现。
简化模式
流程
说明:简化模式中没有【A服务认证服务】这一部分,全部有【A服务客户端】与B服务交互,整个过程不再有授权码,token直接暴露在浏览器。
第一步:【A服务客户端】将用户自动导航到【B服务认证服务】,这一步用户需要提供一个回调地址,以备【B服务认证服务】返回token使用,还会携带一个【A服务客户端】的状态标识state。
第二步:用户点击授权按钮表示让【A服务客户端】使用【B服务资源服务】,这一步需要用户登录B服务,也就是说用户要事先具有B服务的使用权限。
第三步:【B服务认证服务】生成通行令牌token,token将通过第一步提供的回调地址,返回给【A服务客户端】。
场景
适用于A服务没有服务器的情况。比如:纯手机小程序,JavaScript语言实现的网页插件等。
密码模式
流程
第一步:直接告诉【A服务客户端】自己的【B服务认证服务】的用户名和密码
第二步:【A服务客户端】携带【B服务认证服务】的用户名和密码向【B服务认证服务】发起请求获取token。
第三步:【B服务认证服务】给【A服务客户端】颁发token。
场景
此种模式虽然简单,但用户将B服务的用户名和密码暴露给A服务,需要两个服务信任度很高才能使用。
客户端模式
流程
说明:这种模式其实已经不太属于OAuth2范畴。A服务完全脱离用户,以自己的身份去向B服务索取token。换言之用户无需具备B服务的使用权也可以。完全是A服务与B服务内部交互,与用户无关了。
第一步:A服务向B服务索取token。
第二步:B服务返回token给A服务。
场景
A服务本身需要B服务资源,与用户无关。

相关文章
|
2月前
|
SQL 容灾 数据库
分布式事务Seata
本章学习分布式事务问题及解决方案,涵盖CAP、BASE理论,并深入讲解Seata框架的XA、AT、TCC、SAGA四种模式原理与实现,掌握跨服务事务一致性处理及高可用部署。
 分布式事务Seata
|
2月前
|
XML Java 数据库
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目创建、模块配置、数据库导入及服务远程调用实现。通过RestTemplate完成服务间HTTP通信,解决跨服务数据获取问题,并引导读者理解微服务拆分与调用关系,为后续深入学习奠定基础。(239字)
 SpringCloud工程部署启动
|
2月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata TC服务器的部署与微服务集成,包括下载、解压、配置修改、数据库表创建及启动步骤,并实现基于Nacos的高可用与异地容灾集群,提升分布式事务可靠性。
|
2月前
|
JSON Java Shell
Jmeter快速入门
本文介绍JMeter的安装与快速入门使用方法,包括环境依赖、下载解压、启动运行、中文界面设置及基本测试计划创建,涵盖线程组配置、HTTP请求添加、监听器使用等性能测试核心操作步骤。
 Jmeter快速入门
|
2月前
|
自然语言处理 Java Shell
安装ES、Kibana、IK
本文介绍了如何通过Docker部署单点Elasticsearch与Kibana,并配置IK分词器。内容涵盖网络创建、镜像加载、容器运行、DevTools使用,以及IK分词器的安装与扩展词典、停用词配置,助力中文文本分析。
 安装ES、Kibana、IK
|
2月前
|
缓存 Java Nacos
@RefreshScope热更新原理
本文深入解析Spring Cloud中@RefreshScope注解实现配置热更新的原理。通过分析其组合注解特性,重点揭示@Scope("refresh")如何借助代理与缓存机制,在配置变更时触发Bean重建,结合Nacos实现动态刷新。全文涵盖注解解析、作用域管理与刷新流程,帮助理解热更新核心机制。(238字)
 @RefreshScope热更新原理
|
2月前
|
安全 Java 数据安全/隐私保护
4.认识SpringSecurity
Spring Security 是一个功能强大的安全框架,核心功能包括认证、鉴权与防护。支持多种认证方式(如OAuth2、JWT、表单认证等),提供基于URL和方法的细粒度权限控制,集成RBAC模型,并具备防御CSRF等攻击的能力,保障应用安全。
 4.认识SpringSecurity
|
2月前
|
存储 缓存 Java
自动装配机制
本文深入解析SpringBoot核心注解@SpringBootApplication的源码实现,涵盖元注解(@Target、@Retention等)、组合注解原理及自动装配机制。重点剖析@ComponentScan、@SpringBootConfiguration与@EnableAutoConfiguration的作用,揭示@AutoConfigurationPackage和AutoConfigurationImportSelector如何通过spring.factories实现自动化配置,展现SpringBoot“约定优于配置”的设计思想。(239字)
|
2月前
|
XML SQL Java
1. 整合Logback,滚动记录+多文件
本文展示了logback-spring.xml的配置示例,定义了ERROR、INFO等日志级别及输出文件,并通过Java代码演示如何使用Logger记录不同类型的日志信息,适用于Spring Boot项目中的日志管理。
|
2月前
|
XML JSON Java
什么是RESTful
RESTful是一种设计规范,强调以资源为中心,通过统一的HTTP方法(GET/POST/PUT/DELETE)对资源进行操作,提升接口的可读性、规范性和可维护性,解决传统接口路径混乱、行为不统一的问题。