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 Tokensecret,具体返回的参数为:oauth_tokenoauth_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.0OAuth1.0 相比,整个授权验证流程更简单更安全(省去了复杂的签名过程)

3.其他

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

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

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

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

相关文章
|
9月前
|
存储 安全 Java
OAuth2.0
OAuth2.0
192 0
|
1月前
|
存储 安全 Java
|
5月前
|
JSON 安全 Cloud Native
什么是单点登录?什么又是 OAuth2.0?
什么是单点登录?什么又是 OAuth2.0?
105 0
|
10月前
|
存储 JavaScript 前端开发
带你全面了解 OAuth2.0
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了。所以当时自己也整理了一篇文章《SSO单点登录原理及实现方式》 最近需要经常和各大电商平台进行对接,所以又和OAuth2.0重逢了。因此这里再次对OAuth2.0的原理及实现方式进行一个梳理,希望通过这套教程能够帮到大家。对于技术类的文章,这引言是有点过长了。好了下面我们进入正题。
371 0
|
11月前
|
安全 JavaScript 前端开发
详解OAuth2.0
1.概述 OAUTH,Open Authorization,开放授权协议,为用户资源的授权提供了一个安全的、开放而又简易的标准。目的是让第三方对用户的数据只有有限访问权,而无法触及到用户的核心信息。 例如,在第三方网站上使用微信或者QQ作为账号进行登录,就是使用的oauth协议,只返回给第三方诸如用户名、头像等信息,而不会返回给第三方秘密等核心数据。 OAuth最初由Twitter的开发人员提出,后来成为了一个互联网标准,并得到了广泛应用。OAuth2.0是OAuth协议的第二个版本,是一种更加安全、可扩展、功能更加完备的授权协议。目前我们说OAuth一般指的就是OAuth 2.0。
1216 1
|
JSON 安全 前端开发
什么是 OAuth?
什么是 OAuth? 从高层次开始,OAuth 不是API或服务:它是授权的开放标准,任何人都可以实施它。 更具体地说,OAuth 是应用程序可以用来为客户端应用程序提供“安全委托访问”的标准。OAuth 通过 HTTPS 工作,并使用访问令牌而不是凭据对设备、API、服务器和应用程序进行授权。 OAuth 有两个版本:OAuth 1.0a和OAuth 2.0。这些规范彼此完全不同,不能一起使用:它们之间没有向后兼容性。 哪一个更受欢迎?好问题!如今,OAuth 2.0 是使用最广泛的 OAuth 形式。所以从现在开始,每当我说“OAuth”时,我都是在谈论 OAuth 2.0——因为它很可能
146 0
什么是 OAuth?
|
安全 应用服务中间件 API
JWT和OAuth2.0
JWT是一种认证协议,提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。SSO私钥加密token。应用端公钥解密token。 OAuth2.0是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。
163 0
JWT和OAuth2.0
|
存储 安全 Java
OAuth2.0介绍|学习笔记
快速学习 OAuth2.0介绍
94 0
OAuth2.0介绍|学习笔记
|
存储 数据库 数据安全/隐私保护
OAuth2介绍 | 学习笔记
快速学习 OAuth2介绍
121 0
OAuth2介绍 | 学习笔记
|
安全 程序员 数据安全/隐私保护
浅谈OAuth2.0
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。OAuth不是一个认证协议,这点不要搞混。