1.认识OAuth2.0

简介: OAuth2.0是一种开放授权协议,允许第三方应用在用户授权下安全访问资源,而无需获取用户账号密码。它有四种授权模式:授权码模式(最常用)、简化模式(适用于前端应用)、密码模式(需高度信任)和客户端模式(服务间调用)。广泛用于第三方登录和API资源访问。

1.认识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四种授权模式
针对上面的获取照片,我们结合下图进行详细展开
授权码模式
流程
说明:【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服务资源,与用户无关。

相关文章
|
3月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关是微服务架构的统一入口,具备路由转发、权限控制、限流及负载均衡等核心功能。基于SpringCloud Gateway可实现高性能响应式编程,支持丰富的断言与过滤器工厂,并可通过全局过滤器扩展自定义逻辑,有效解决跨域等问题,是微服务治理的关键组件。
208 0
|
3月前
|
存储 NoSQL 关系型数据库
【赵渝强老师】MongoDB的数据类型
本文介绍MongoDB中常用的数据类型,包括ObjectId、String、Boolean、Number、Array、Object、Date等,通过代码示例演示其用法与区别,帮助理解文档型数据库的数据存储机制。
197 0
|
5月前
|
JSON 安全 API
全网最全面介绍1688API接口指南
1688是阿里巴巴旗下B2B批发平台,其API支持商品搜索、订单管理、数据同步等功能。本文详解API核心概念、权限申请、调用步骤及Python示例,涵盖认证安全、常见问题与最佳实践,助您快速实现系统集成与业务自动化。(239字)
978 1
|
3月前
|
JSON 安全 Java
SpringBoot.鉴权
本文介绍如何在Spring Boot项目中结合JWT与Spring Security实现安全鉴权。涵盖Token生成与验证、自定义认证流程、角色权限控制(RBAC),并通过过滤器实现登录拦截与请求认证,保障接口安全。
213 2
|
3月前
|
Web App开发 JavaScript 前端开发
SpringBoot.跨域处理
跨域指协议、域名、端口不同时的资源请求限制。本文详解CORS解决方案,包括@CrossOrigin注解、全局配置WebMvcConfigurer及Filter拦截器实现,支持指定域名跨域访问,保障前后端分离架构下安全通信。
109 2
|
3月前
|
存储 缓存 Java
SpringBoot自动装配机制
SpringBoot通过@SpringBootApplication实现自动装配,其核心为@AutoConfigurationPackage与@AutoConfigurationImportSelector。前者注册主包路径,后者加载spring.factories中配置的自动配置类,结合@ComponentScan与过滤机制,实现Bean的自动扫描、去重与注入,简化开发配置。
193 1
|
3月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务一站式解决方案,整合多种技术,实现服务注册发现、配置管理、负载均衡等功能。约定大于配置,开箱即用,支持云原生。Netflix组件停更后,Spring Cloud Alibaba成为主流,集成Nacos、Sentinel、Seata等阿里开源组件,提供完整微服务生态支持。
339 0
|
3月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心通过集中化管理微服务配置,实现动态热更新与环境隔离,避免频繁重启服务。借助bootstrap.yml优先加载配置,支持@RefreshScope热刷新、@ConfigurationProperties绑定,并实现多环境共享及优先级控制,结合Nginx搭建高可用集群,提升系统稳定性与可维护性。
205 0
|
3月前
|
存储 Java API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目导入、模块创建、数据库配置及服务启动。通过RestTemplate实现order-service与user-service间的远程调用,解决跨服务数据获取问题,帮助理解微服务拆分与通信机制。
100 0
|
3月前
|
SQL 容灾 数据库
分布式事务Seata
Seata是阿里开源的分布式事务解决方案,提供XA、AT、TCC、SAGA四种模式,解决微服务架构下的跨库跨服务事务一致性问题。通过TC(事务协调者)、TM、RM三大角色实现全局事务管理,支持高可用部署与无缝集成Spring Cloud,助力系统实现最终一致或强一致性事务。
356 0