OAuth2是什么?能干什么?

本文探讨OAuth2作为授权认证方案的重要性,详细解析其解决开放系统授权、分布式访问(单点登录)及现代微服务安全问题的方法。通过对比不同授权方式,阐述OAuth2令牌机制的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言
1. OAuth2是什么

在这里插入图片描述
简单来说,就是一种授权认证;一种针对开放系统间授权,分布式访问(单点登录)和现代微服务安全的解决方案;这种解决方案为我们提供了一种思路,但具体的实现我们要自己书写(就好比给我们一个接口)
所能解决的问题:开放系统键授权,分布式访问(单点登录)和 现代微服务安全

2. 开放系统间授权

在这里插入图片描述
假如Lucy 需要把百度网盘上的图片在网上的某个地方进行打印;这时候该打印的地方是不能直接获取百度网盘上的图片的;因为它没有该访问的权限(即我们所谓的用户名和密码),这时候,该打印的地方需要Lucy给它相关的授权认证。===>OAuth2就是来解决该问题的。
该问题的解决也不是一蹴而就的(它是经过演变而来的)
方式一: 密码和用户名复制
适用于同一公司内部的多个系统,不适用于不受信的第三方应用
在这里插入图片描述
这种方法虽然能解决打印图片的问题,但它的安全性可想而知;我们需要把个人信息直接曝光在其他的平台上,这样我们的很多隐私就会暴露,所以这种方式并不可取。
方式二:通用开发者key
适用于合作商或者授信的不同业务部门之间
在这里插入图片描述
该方法看上去十分完美,只要我们得到相关的万能钥匙就能访问用户提供的图片,并做打印服务;可这个方案存在一个天然缺陷,我们需要找到百度网盘进行合作;可并非每一个公司都有这个资质的,你是一个刚起步的小公司。假如你向百度发起了合作,很显然成功的概率并不大,所以该解决方案适用的场景也十分狭小了。

方式三:办法令牌
接近OAuth2方式,需要考虑如何管理令牌、颁发令牌、吊销令牌,需要统一的协议,因此就有了OAuth2协议
在这里插入图片描述
OAutho2该解决方案完美地解决了用户信息安全性低,与大公司难以协作的问题;发放令牌也就是生成随机的具有特殊含义的字符串,该字符串能访问特定权限的文件。(显然比找大公司合作更方便)

2.分布式访问(单点登录)

单点登录的介绍可参考:单点登录
在这里插入图片描述
OAuth2的解决方案:令牌机制,按照一定规则生成字符串,字符串包含用户信息(类似于单点登录中的token解决方案)
这种登录方式就好比我们在edu登录了,其余几个模块也能得到我们的用户信息而不需要再一次登录(类似于我们登录了百度账号,就能在贴吧,文库等地方看到自己的登录信息)
[1] 在一个模块登录成功之后,按照一定规则(可以是JWT)生成,字符串包含用户信息
[2] 把生成字符创通过路径,请求头或者cookie进行传送
[3] 后面发送请求的时候,每次带着字符串进行发送,获取字符串,从字符串中获取用户的登录信息。

3. 现代微服务安全

[1] 传统单块应用的安全
在这里插入图片描述
[2] 现代微服务的安全
现代微服务中系统微服务化以及应用的形态和设备类型增多,不能用传统的登录方式
核心的技术不是用户名和密码,而是token,由AuthServer颁发token,用户使用token进行登录
在这里插入图片描述

[3] 我们生活中OAuth2应用
在这里插入图片描述
[4] OAuth2.0的误解
在这里插入图片描述
在这里插入图片描述

4. 总结

在这里插入图片描述

03-08
### OAuth 2.0 协议详解 #### OAuth 2.0 的作用及工作流程 OAuth 2.0 是一种用于授权的开放标准协议,旨在让应用能够安全地获取有限制条件下的用户数据访问权限。该协议允许第三方服务在不暴露用户凭证的情况下获得用户的同意来访问特定的数据或执行某些操作[^1]。 具体来说,在OAuth 2.0的工作流中,当客户端请求受保护资源时,会重定向到授权服务器让用户登录并确认授权许可;一旦得到批准,则返回给客户端一个临时性的授权码。接着,客户端利用此授权码向授权服务器换取长期有效的访问令牌(access token),之后便可以凭借这个令牌去调用API接口完成相应功能[^2]。 #### 应用场景举例 - **社交媒体分享**:网站可以通过集成社交平台提供的SDK实现一键分享按钮的功能,而无需保存用户的账号密码信息。 - **跨站单点登录(SSO)**:多个关联站点之间共享同一套认证体系,简化了多处注册繁琐过程的同时提高了用户体验度。 - **云存储同步**:个人电脑上的文件夹可自动上传备份至云端空间,期间涉及到了对远程服务器上私有资料的操作权利授予问题。 - **移动支付绑定银行卡**:手机APP里添加银行账户选项时往往也需要经过类似的验证环节以确保资金流转的安全可靠。 ```python import requests def get_access_token(client_id, client_secret, authorization_code, redirect_uri): url = 'https://example.com/oauth/token' payload = { 'grant_type': 'authorization_code', 'client_id': client_id, 'client_secret': client_secret, 'code': authorization_code, 'redirect_uri': redirect_uri } response = requests.post(url, data=payload) return response.json().get('access_token') ``` 上述代码展示了如何使用Python发送HTTP POST请求交换授权码为访问令牌的过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值