OAuth2.0与OAuth1.0你了解了吗?

简介: OAuth2.0与OAuth1.0你了解了吗?

1.OAuth简介

OAuth 协议简单的来说就是第三方应用在不知道我方用户账号密码的情况下,通过我们的授权,进行登录操作。它减少了用户注册的次数,方便用户快捷登录,提升用户体验度,更保障了用户的信息不被泄露。毕竟 qq/微博 大部分人都使用,而第三方应用却很少有人使用,用户既可以使用常用的登录方式登录,又不需要担心 qq/微博 泄露我们的信息给第三方应用。

2.OAuth2.0选择缘由

2.1 OAuth1.0[1]

2.1.1 访问过程

1) 客户端向资源服务器请求未授权 Request Token

2) 服务器返回未授权Request Token和 secret,具体返回的参数为:oauth_token 和 oauth_token_secret

3) 客户端携带上一步的 oauth_token 以及 oauth_callback 等参数请求服务器,调起授权页面更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

4) 用户授权

5) 资源服务器将用户重定向回客户端,并带回授权过的 Request Token 也就是 oauth_token

6) 获取到授权 Request Token,再向资源服务器换取票据 accessToken

7) 通过票据 accessToken 访问用户在资源服务器存储的受保护的资源

2.1.2 优点

OAuth1.0 协议每个 Token 都会进行加密

2.1.3 缺点

1) 用的是 http 协议

2) 容易在申请 RequestToken 过程中,被攻击者调包,然后伪造回调地址,拿到用户的 accessToken 然后为所欲为。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2.2 OAuth2.0

2.2.1 访问过程

在 OAuth2.0 协议中常用的授权方法有四种:授权码模式、简化模式、密码模式、客户端模式。通过授权码模式进行说明:

1) 引导用户到授权服务器,请求用户授权,用户授权后返回授权码(Authorization Code)

2) 客户端由授权码到授权服务器换取访问令牌(Access Token)

如果需要,开发者可以通过 refresh_token 刷新授权 access_token,避免过期

3) 用访问令牌去访问得到授权的资源

2.2.2 优点

1) 使用 https ,更加安全

2) 所有的 token 不再有对应的 secret 存在,签名过程简洁

3) 能更好地支持不是基于浏览器的应用

4) 有刷新令牌的机制更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2.2.3 缺点

1) OAuth2.0 不兼容老版本

2) OAuth2.0 的访问令牌,也就是 access_token 有有效期

2.3 对比

1) OAuth2.0 使用 https 的方式更加安全; OAuth1.0 虽然所有的 token 都会进行加密,但因为使用 http 方式而有被劫持攻击风险。

2) OAuth2.0 可以通过多种方式获取访问令牌,考虑到了客户端存在的各种形态,包容性好;而 OAuth1.0 只有一种方式

3) OAuth2.0 较 OAuth1.0 相比,整个授权验证流程更简单更安全(省去了复杂的签名过程)

3.其他

1.授权码模式中,为什么不直接获取令牌,而是通过授权码,岂不是多此一举?

答:授权码是为了防止中间者攻击。比如第三方使用 http 协议,直接传递令牌,很容易被劫持,有了授权码之后,情况便大不相同。授权码一般有效期十分钟且只能被使用一次,攻击者即使获取到授权码,换到了令牌,当第三方应用也通过授权码获取令牌时,授权服务器就会因为授权码被使用两次而让令牌失效,从而保证安全。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2.为什么授权模式为了避免 CSRF 攻击,可以在 URL 请求后面加个参数 state,这是什么原理?[2]

答:state 参数能标记这是来自哪一个网站,且 state 参数是攻击者拿不到的,因此可以避免 CSRF 攻击。

相关文章
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
1490 0
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
|
10月前
|
自然语言处理 搜索推荐 安全
2025数字人平台应用解析:各数字人定制场景化实践与技术特点
“来灵数字人”由苏州咖豆信息研发,聚焦数字人技术的实用化落地,推动其从形象展示向智能交互升级。平台具备系统协同、多模态交互、数据安全、行业知识嵌入与持续优化能力,已在零售、教育、金融等领域实现应用,提升服务效率与用户体验,助力企业数字化转型。
346 4
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
795 0
|
关系型数据库 MySQL 测试技术
MySQL性能测试(完整版)
MySQL性能测试(完整版)
1945 2
|
Rust Ubuntu Java
官方支持长达12年!Ubuntu 24.04 LTS正式开放升级:Linux 6.8内核
对于开发者而言,Ubuntu 24.04 LTS在性能工程和机密计算方面迈出了重要一步,包含了Python 3.12、Ruby 3.2、PHP 8.3和Go 1.22等最新编程语言版本,重点优化了对.NET、Java和Rust等开发环境的支持。
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
645 2
|
Java Spring
spring多线程实现+合理设置最大线程数和核心线程数
本文介绍了手动设置线程池时的最大线程数和核心线程数配置方法,建议根据CPU核数及程序类型(CPU密集型或IO密集型)来合理设定。对于IO密集型,核心线程数设为CPU核数的两倍;CPU密集型则设为CPU核数加一。此外,还讨论了`maxPoolSize`、`keepAliveTime`、`allowCoreThreadTimeout`和`queueCapacity`等参数的设置策略,以确保线程池高效稳定运行。
3072 11
spring多线程实现+合理设置最大线程数和核心线程数
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
1217 2
|
存储 机器学习/深度学习 数据采集
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
|
SQL 监控 关系型数据库
使用 pt-query-digest 工具分析 MySQL 慢日志
【8月更文挑战第5天】使用 pt-query-digest 工具分析 MySQL 慢日志
1667 3
使用 pt-query-digest 工具分析 MySQL 慢日志