Oauth2.0协议简介

Posted 李晓娜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oauth2.0协议简介相关的知识,希望对你有一定的参考价值。

 Ø  什么是Oauth2.0授权

  概念

  Oauth2.0授权是一个关于开放授权的一个开放标准,它可以允许用户授权第三方应用并且访问他们存储在另外的服务提供者上面的信息,而不需要将用户名和密码提供给第三方应用或者分享他们的数据的所有内容。

  访问的原理是:Oauth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。

  原理

  来看一下简单的授权原理图:


  那么这个认证和授权的过程涉及到三方,分别是用户,第三方应用以及服务提供商。

  用户:通常就是服务商的用户,是授权的主体;

  第三方应用:通常就是我们开发的应用,一般是要从服务商那边获取护着访问用户存在服务商那边的信息的。

  那么整个认证和授权的流程:


  我们看到用户在发送请的时候,第三方应用会将用户引导到服务商的授权页进行授权,授权完毕再重新回调我们请求地址,在需要在请求的url中需要携带一些参数:

  比如回调的地址,第三方身份,授权方式以及请求的资源列表等等。

  关于第三方的身份何来?

  需要我们在需要调用相应的服务商的平台进行注册:

  也就是我们第三方应用首先需要与服务商的应用进行对接,也就是第三方应用需要在服务商的平台进行申请,从而获取到我们所谓的身份,申请成功后就会获取到身份的信息,获取到一个id和一个key值,这样就是我们进行授权和认证的关键的步骤。

  简单解释一下上面的图解:

  第一步:我们使用一个第三方的连接向第三方的应用发送请求

  第二步:(此时第三方应用为了获取用户的信息)第三方应用引导用户redirect至服务商的授权页,并且携带一些参数,比如第三方身份,授权的方式,回调的地址,请求的资源列表

  第三步:用户在服务商页完成授权,之后引导用户跳转到第三方应用提供的回调地址页面,此时会将一个一次性的code授权码作为参数进行传回

  第四步:此时的浏览器以授权码为参数访问第三方的应用(授权码的获取是在上一步的连接中进行返回的,在后台处理后拼接到我们请求的应用中)

  第五步:此时第三方应用以code以及第三方的身份信息,密钥信息为参数去调用服务商提供的API进行访问授权

  第六步:授权成功后,服务商返回给第三方应用一个访问码,access_token

  第七步:此时第三方应用携带着access_token再次去请求服务商服务列表,服务商以access_token为调用的凭证,从而进行服务商提供的各种api从而完成相关的操作。

  看到这里是不是清楚些了呢?

  示例说明

  我们以微信的调用过程为例,看看这些api是怎么样拼写的?

  第一步:用户同意授权,获取到code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

  需要解释的: scope参数中的snsapi_base和snsapi_userinfo,前者是静默授权也就是用户无感知的时候,此时获取到用户的部分信息,此时只是能获取到用户的openId。

后者的授权方式是征得用户同意的授权方式:

  此时用户是可以感知到的

  还有一个需要解释的是:code值,用户同意授权后,此时会获取到一个code值,这个值是一次性的,code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

细心的会发现,我们的使用的接口调用协议是https,这是一种安全协议,为了保证我们接口调用的安全性。

  同时我们还是可以在内部更加进一步的进行封装,可以使用ssl协议使用安全套接字进行进一步的请求的时候的安全加固,从而保证我们连接的安全性,从而保证系统的高可靠性。

  第二步:使用code换取网页授权的access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

这是我们请求的连接,成功后会返回access_token,

  "access_token":"ACCESS_TOKEN",

   "expires_in":7200,

  "refresh_token":"REFRESH_TOKEN",

   "openid":"OPENID",

   "scope":"SCOPE",

   "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"

  此时我们会发现返回的不仅仅是access_token,还有就是openid,以及过期时间等等

  此处我们需要解释的就是:access_token是存在失效时间的,失效时间是2个小时。过期后的access_token是无法继续进行请求进而获取我们的资源列表的,那么此时怎么办呢?

  不用怕,此时我们可以使用refresh_token进行access_token的刷新获取。

      相对于access_token,refresh_token拥有较长的时间,一旦refresh_token也失效,那么此时是需要我们重新进行授权的。

  第三步:实现我们获取用户信息的方法(以获取用户信息为例)

  http:GET(请使用https协议)

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

  此时只是需要填写之前我们获取到access_token以及openId即可获取相应的信息,也就是通过网页授权access_token和openid获取用户基本信息。

  此时是不是清楚多了关于Oauth2.0协议的内容

以上是关于Oauth2.0协议简介的主要内容,如果未能解决你的问题,请参考以下文章

OAUTH2.0协议-菜鸟级

开放授权协议:Oauth2.0

开放授权协议:Oauth2.0

第 87 天:Python Web开发 OAuth2.0 简介

oauth2.0协议原理

OAuth2-简介