认识OAuth2.0

简介: OAuth2.0是开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其四种模式:授权码模式最安全,适用于Web应用;简化模式适合无后端场景;密码模式需高度信任;客户端模式用于服务间通信。广泛应用于第三方登录与API授权。

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服务资源,与用户无关。

相关文章
|
9月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
840 56
Spring Boot 的接口限流算法
|
3月前
|
Linux 数据安全/隐私保护 虚拟化
虚拟机安装(CentOS7)
准备CentOS7镜像及VMware Workstation工具,可使用提供的百度云链接下载。通过VMware创建虚拟机,参考指定教程完成安装,默认用户名为root,密码由用户自设。确保电脑满足运行需求。(236字符)
|
3月前
|
关系型数据库 MySQL Java
开发环境搭建
配置开发环境是高效学习的第一步。建议电脑内存16G以上,推荐32G,搭配便携显示器提升效率。下载并安装虚拟机(CentOS 7,IP:192.168.101.68)、IDEA、Maven、Git等工具,导入课程资料中的项目,配置MySQL、Nacos等服务。通过FinalShell连接虚拟机,使用Docker启动容器,IDEA中配置JDK11与Maven仓库。前端通过nginx运行,访问localhost:18080查看效果。确保各组件正常运行,为后续开发打下坚实基础。(239字)
|
3月前
|
消息中间件 Linux Shell
RabbitMQ部署指南
本文详细介绍RabbitMQ在CentOS7上基于Docker的单机与集群部署方案。涵盖镜像拉取、容器运行、DelayExchange插件安装;深入讲解普通模式与镜像模式集群搭建,包括cookie配置、网络设置、高可用测试,并引入3.8版本新特性——仲裁队列,实现数据冗余与集群扩容,提升系统可靠性与可扩展性。
|
3月前
|
关系型数据库 MySQL Java
SpringCloud工程部署启动
本教程介绍SpringCloud微服务项目搭建与部署,支持完整工程导入或从零构建。涵盖父工程、子模块创建,POM依赖管理,user-service与order-service模块开发,数据库配置及业务代码编写。通过RestTemplate实现服务间远程调用,解决跨服务数据获取问题,帮助理解微服务拆分与通信机制,为后续深入学习打下基础。
|
3月前
|
存储 监控 Docker
ElasticSearch集群
Elasticsearch集群通过分片与副本机制解决海量数据存储及单点故障问题。将索引拆分为多个shard分布于不同节点,提升存储与性能;通过replica实现数据高可用。利用docker-compose可快速搭建三节点集群,结合cerebro监控集群状态。支持分片路由、分布式查询与故障自动转移,保障系统稳定高效运行。(238字)
|
3月前
|
消息中间件 存储 监控
Mac系统安装教程
RabbitMQ是基于AMQP协议的开源消息代理,支持异步通信、解耦服务,广泛用于分布式与微服务架构。具备高可靠、灵活路由、持久化、可扩展等特性,支持多种消息模式。可通过Homebrew或二进制方式安装,提供Web管理界面,便于操作与监控。
|
3月前
|
存储 负载均衡 Java
Nacos注册中心
本文详细介绍Nacos的安装部署、服务注册与发现、分级模型、负载均衡策略、权重控制、环境隔离及临时/持久化实例等核心功能,涵盖Spring Cloud Alibaba整合实践,帮助开发者掌握Nacos在微服务架构中的应用,实现高效服务治理与配置管理。
|
3月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud应微服务需求而生,提供一站式解决方案,具备约定优于配置、组件丰富、云原生适配等特点。通过版本命名规范避免子项目冲突,结合Alibaba生态形成更完善的微服务技术栈,成为主流选择。

热门文章

最新文章