oAuth2.0
Posted 熊哥是程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oAuth2.0相关的知识,希望对你有一定的参考价值。
加关注
什么是oAuth?
Open Authorization(开放授权)
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。
oAuth2.0的模式
授权码模式(authorization code)
功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。
简化模式(implicit)
不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。
密码模式(resource owner password credentials)
用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
客户端模式(client credentials)
客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。
oAuth2.0的流程
授
权
码
模
式
1.用户到授权服务器,请求授权,然后返回授权码(AuthorizationCode)
2.客户端由授权码到授权服务器换取访问令牌(access token)
3.用访问令牌去访问得到授权的资源
通俗的讲:你想让人(客户端)帮你去A房间里面拿文件,可是你没有A房间的钥匙虽然你可以去配一把但是你懒得去,而恰巧在你拥有钥匙B(授权码)的B房间(授权服务器)里面有打开A房间的一次性门卡(访问令牌),所以你就把B房间的钥匙给了那个人(授权),那个人去B房间里面拿了门卡去打开A房间的门并帮你拿出来文件。
简
化
模
式
1.用户访问客户端,后者将前者导向认证服务器。
2.用户选择是否给予客户端授权。
3.假设用户给予授权,认证服务器会直接向客户端发送访问令牌(access token)。
4.Client拿着access token去访问Resource资源
oAuth2.0与1.0的区别
oAuth1.0与oAuth2.0是相互不兼容的,所以他们为我们提供了不同的授权方式:
1.0的用户授权过程
客户端到授权服务器请求一个授权令牌(Request Token&Secret)
引导用户到授权服务器请求授权
用访问令牌到授权服务器换取访问令牌(Access Token&Secret)
用访问令牌去访问得到授权的资源
请求授权令牌(request token&secret)—>换取访问令牌(access token&secret)—>访问资源
2.0的用户授权过程
用户到授权服务器,请求授权,然后返回授权码(AuthorizationCode)
客户端由授权码到授权服务器换取访问令牌(access token)
用访问令牌去访问得到授权的资源
获取授权码(Authorization Code)—>换取访问令牌(access_token)—>访问资源
1.0协议每个token都有一个加密,2.0则不需要。这样来看1.0似乎更加安全,但是2.0要求使用https协议,安全性也更高一筹。
2.0充分考虑了客户端的各种子态,因而提供了多种途径获取访问令牌,有:授权码、客户端私有证书、资源拥有者密码证书、刷新令牌等方式,而且验证过程更为简洁。
相比之下 1.0只有一个用户授权流程。
oAuth解决的问题
在上面的流程中我们知道在OAuth中,简单来说有三方:用户(这里是指属于服务方的用户)、服务方、第三方。
服务方不信任用户,所以需要用户提供密码或其他可信凭据
服务方不信任第三方,所以需要第三方提供自已交给它的凭据(通常的一些安全签名之类的就是)
用户部分信任第三方,所以用户愿意把自已在服务方里的某些服务交给第三方使用,但不愿意把自已在服务方的密码交给第三方
而oAuth就是为了解决用户、服务方、第三方在某次服务时这三者之间的信任问题。
文案:温作特
以上是关于oAuth2.0的主要内容,如果未能解决你的问题,请参考以下文章