认识OAuth2.0

简介: OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。它通过令牌(token)机制实现权限控制,支持授权码、简化、密码和客户端四种模式,广泛用于第三方登录与服务间资源共享。

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

相关文章
|
云安全 负载均衡 网络协议
阿里云waf简介和如何配置​
阿里云WAF(Web应用程序防火墙)是一种高效、智能的云安全服务,旨在保护Web应用程序免受各种网络攻击的威胁。它可防止诸如SQL注入、跨站点脚本(XSS)和跨站点请求伪造(CSRF)等攻击,有效保障了Web应用程序的安全性与稳定性。 阿里云WAF在Web应用程序与互联网之间构建一道安全屏障,通过拦截和检测恶意流量,防止攻击者对您的Web应用程序进行攻击。它不仅覆盖了常见的网络攻击类型,还针对新兴的攻击手段进行了防护设计,确保您的Web应用程序在面对各种威胁时都能得到全方位的保护。
|
2月前
|
数据采集 SQL 人工智能
详解面试高频的 28 个 RAG 问题:从基础知识到架构优化全面剖析!
这篇文章我们就系统梳理 28 个高频面试问题,直接带你理解 RAG 从“原理 → 问题 → 优化 → 未来”的完整演化逻辑,确保你下一次面试不被问懵。
|
自然语言处理 Java 测试技术
Spring Boot中对自然语言处理工具包hanlp的调用详解
HanLP 是基于 Java开发的 NLP工具包,由一系列模型与算法组成,目标是普及自然语言处理在生产环境中的应用。而且 HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点,因此十分好上手,本文就结合 Spring Boot来将 HanLP用起来!
11099 0
|
3月前
|
存储 自然语言处理 测试技术
开源嵌入模型对比:让你的RAG检索又快又准
嵌入是RAG系统的核心,将文本转化为语义向量,实现基于含义的检索。本文详解嵌入原理、关键参数及主流开源模型,助你根据分块大小、语言需求和性能约束,选择最合适的嵌入方案,提升RAG效果。
1109 4
开源嵌入模型对比:让你的RAG检索又快又准
|
6月前
|
存储 资源调度 并行计算
# Qwen3-8B 与 Qwen3-14B 的 TTFT 性能对比与底层原理详解
通义千问Qwen3系列是通义实验室2025年推出的最新大模型,包含多种参数版本,其中Qwen3-8B与Qwen3-14B均支持32K token上下文。Qwen3-8B参数量较小,响应更快,适合低延迟交互;Qwen3-14B参数更多,推理更强,适用于复杂任务。两者在TTFT、架构优化、量化技术及部署方案上各有侧重,满足多样应用场景需求。
3804 10
|
4月前
|
存储 数据采集 人工智能
切块、清洗、烹饪:RAG知识库构建的三步曲
大语言模型明明已经喂了大量文档,为什么还是答非所问?就像米其林厨师需要精心处理食材,RAG系统也需要巧妙处理文档。从文本分块、清洗到结构化索引,这些不起眼的处理步骤决定了AI回答质量的上限。掌握这些技巧,让你的RAG系统从「路边摊」蜕变为「米其林餐厅」。
1255 3
|
26天前
|
存储 缓存 Java
自定义注解
本文介绍Java自定义注解的实现原理与应用,结合Spring AOP和过滤器实现日志、权限控制等功能。通过@Target、@Retention等元注解定义注解,并在Controller中使用,配合拦截器完成登录验证等实际场景,提升代码可读性与复用性。
|
6月前
|
存储 人工智能 自然语言处理
DeepSeek R1+Ollama+Cherry Studio实现本地知识库的搭建
本文介绍了如何使用Ollama和CherryStudio搭建本地知识库,涵盖核心组件介绍、硬件与软件准备、模型部署流程及知识库构建方法。通过配置DeepSeek R1模型、嵌入模型和Cherry Studio平台,实现本地化自然语言处理与知识检索功能。
2364 0