百度百科:OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。OAuth是Open Authorization的简写。
以下是OAuth和OpenID的区别,摘自https://www.cnblogs.com/linyc/p/4338092.html:
现在很多网站都可以用第三方的账号登陆,比如,现在我要登录淘宝
买东西,而如果我没有淘宝的账号,我也可以用微博
的账号登录,这个微博账号就是第三方账号了。
OpenID强调 验证 authentication
,而OAuth强调 授权 authorization
。 验证就是说“我”是不是
(微博用户),而授权是说“淘宝”可不可以
,而可不可以
的前提则是“我”是不是
。
过程大概是这样
- 我点开微博登录的链接,淘宝就跳到微博登录页面,问我你是不是那个微博用户,是的话你用你的账号密码去登录,你先去给微博验明正身,是的话再来找我
-
好啦,我屁颠屁颠输入账号跟密码,如果可以登录说明我这个身份是对的,通过了微博的验证后微博就告诉淘宝说,没错没错,我家里确实有么这个家伙
上面这些都是OpenID的责任,而且OpenID也只做这件事,就是前面说的
是不是
- 然后呢,淘宝就说好好,有你微博验证我放心,于是就让我通过了
- 等等,这时淘宝只知道微博他们家有我存在,但是并不知道我在微博家里叫什么名,做过什么事,其实淘宝也不应该知道,对吧,要是知道我在微博家老是到处举报别人卖假货坑顾客什么的,那我让你进我大淘宝岂不是会坏了我的大事,你丫是来捣乱的吧(至于淘宝为什么会这么想,哼哼~你们懂的)
-
所以,淘宝通常就会做一件事,什么事呢?这时就轮到OAuth出场了,淘宝在把我交给微博验明正身的时候其实还“忽悠“了我,明明只是验个身份,却问我要不要把我在微博家叫什么名做过什么事也告诉它(就是通常看到的几个打勾选项:
允许访问我的昵称
/允许访问我的头像
等等),淘宝说这样就可以为我提供更多的服务,什么服务呢?模凌两可,我呢看到有更多服务也没多想就打勾了,不要白不要是吧。这里就用到了OAuth,就是前面说的
可不可以
,这个要是真发现我在微博家干过的事,会不会把我加入重点监控对象,那就要看淘宝有多少节操了
其实现在很多的第三方登录都是这样,验证身份的同时顺便把你在其他地方的资料拿到手,名曰资料共享,其实共享一些非敏感信息倒也无妨,还可以免去了每去一个新网站都要填写一大堆重复资料的问题。但是我要吐槽的是,很多网站明明让我用第三方账号登录,你都OAuth了为毛登录后还要再填一遍邮箱昵称之类的东西?早知道这样我还不如直接在你这边注册就好了,在我看来这是用户体验的问题了。
写这些其实就是想用简单通俗的语言来解释这两者的区别
以下是OAuth1.0和OAuth2.0的区别,摘自:
①auth1.0与Oauth2.0是相互不兼容的,所以他们为我们提供了不同的授权方式:
2.0的用户授权过程有3步:
A)用户到授权服务器,请求授权,然后返回授权码(AuthorizationCode)
B)客户端由授权码到授权服务器换取访问令牌(access token)
C)用访问令牌去访问得到授权的资源、
总结:获取授权码(Authorization Code)—>换取访问令牌(access_token)—>访问资源:
1.0的授权分4步,
A)客户端到授权服务器请求一个授权令牌(requesttoken&secret)
B)引导用户到授权服务器请求授权
C)用访问令牌到授权服务器换取访问令牌(accesstoken&secret)
D)用访问令牌去访问得到授权的资源
总结:请求授权令牌(request token&secret)—>换取访问令牌(access token&secret)—>访问资源
②1.0协议每个token都有一个加密,2.0则不需要。这样来看1.0似乎更加安全,但是2.0要求使用https协议,安全性也更高一筹。
③2.0充分考虑了客户端的各种子态,因而提供了多种途径获取访问令牌,有:授权码、
客户端私有证书、资源拥有者密码证书、刷新令牌等方式,而且验证过程更为简洁。
相比之下 1.0只有一个用户授权流程。
摘自简书:https://www.jianshu.com/p/95ecbbb3a7c7
OAuth 2.0协议
协议的参与者
OAuth的参与者至少有以下四个:
RO
(Resource Owner):资源所有者,对资源具有授权能力的人。其实来讲就是用户,如上文的小明。RS
(Resource Server):资源服务器,它存储资源,并处理对资源的访问请求。如上文的新浪微博资源服务器。Client
:第三方应用,它获取RO的授权后就可以访问RO的资源。如上文的第三方客户端。AS
(Authorization Server):授权服务器,它认证RO的身份,为RO提供授权审批流程,并最终颁发授权令牌(Access Token)。AS和RS的功能可以由同一个服务器来提供。
简单的来讲就是用户
、第三方客户端
、服务器
。这个服务器有两个工作:授权和提供资源。
OAuth的思路
OAuth在Client和RS之间设置了一层授权层。Client不能直接登录RS,只能利用令牌来登录授权层,而且这个令牌有权限范围和有效期。
时序图:
基本流程:
1、用户
打开第三方客户端
(后面简称客户端),客户端
引导用户
去授权。
2、用户
同意授权给客户端
,也就是点击了同意授权的按钮,之后客户端
会拿到授权证据
。这里用户如何批准是关键,后面会讲到。
3、客户端
向服务器
请求访问令牌(Access Token)
,同时出示前面的步骤拿到的授权证据
。
4、服务器
通过认证后,向客户端
返回访问令牌
。
5、客户端
携带访问令牌
去访问服务器
上的资源。
6、服务器
验证令牌的有效期和真伪,验证通过后才能提供服务。
有两个关键的东西,一个是用户同意授权的授权证据
,一个是用授权证据进一步请求拿到的访问令牌
。