OAuth 2.0详解

OAuth 2.0 是一种主流的授权框架(Authorization Framework),用于让第三方应用安全地访问用户资源,而无需直接暴露用户的账号密码。


一、OAuth2.0 是什么?

OAuth2.0 是一个**“授权”标准协议**,主要用于:

  • 第三方应用 以用户身份安全访问资源
  • 用户可以授权而 无需泄露密码
  • 常用于 Web、移动应用、IoT 的登录与授权

二、角色介绍

角色说明
Resource Owner资源拥有者(比如用户本人)
Client第三方应用程序(比如小红书、微信小程序)
Authorization Server授权服务器,颁发访问令牌(access_token)
Resource Server资源服务器,受保护资源的提供者(比如用户的照片、订单信息等)

三、核心流程图

[User]
  ↓ 登录授权
[Authorization Server] <-- Client_ID 验证 --> [Client App]
  ↓
返回授权码 / 令牌
  ↓
[Client] 用 Token 调接口 --> [Resource Server] 返回数据

四、四种授权模式(Grant Types)

1. 授权码模式(Authorization Code)最常用

场景:微信公众号登录、支付宝授权
步骤:
- 浏览器重定向到授权页,用户同意授权
- 返回 code,后端换取 access_token

2. 简化模式(Implicit) 不推荐

场景:前端应用(token 直接返回)
安全性差,逐渐淘汰

3. 密码模式(Resource Owner Password Credentials) 不推荐

场景:用户把用户名密码直接交给 Client(高信任)
现在已不推荐使用

4. 客户端模式(Client Credentials) 第三方系统之间调用

场景:系统对系统,比如 A 服务访问 B 服务 API
步骤:使用 client_id + client_secret 获取 token

🧪 五、access_token 和 refresh_token

Token 类型说明
access_token访问接口时必须带上的授权令牌,具有有效期
refresh_token用于在 access_token 失效后刷新新 token
expires_intoken 有效期,单位为秒

🔧 六、接口示例(客户端模式)

请求 Token:

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
client_id=client123
client_secret=secret456

返回结果:

{
  "access_token": "abc123xyz",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "read"
}

使用 Token 调用 API:

GET /user/profile
Authorization: Bearer abc123xyz

🔐 七、OAuth2.0 的优势

  • 不暴露用户密码
  • 可设定访问范围(Scope)
  • 支持 Token 刷新和失效机制
  • 支持多种授权方式适配不同场景

八、常见应用场景

场景使用模式
第三方登录(微信、微博)授权码模式
企业系统之间接口对接客户端模式
移动端登录 + Token 鉴权授权码 + Token
内部系统跳转用户免登录单点登录(SSO)

九、常用 Java OAuth2 实现

技术栈描述
Spring Authorization ServerSpring 官方 OAuth2 Server
Spring Security OAuth(旧)已弃用,不推荐
Sa-Token OAuth2Java 国人开发,轻量级 OAuth2 实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值