首页 > 代码库 > oAuth的认知以及开发流程
oAuth的认知以及开发流程
什么是OAUTH
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。
OAUTH定义
OAUTH是一种开放的协议,为桌面、手机或web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAUTH类似于Flickr Auth、Google‘s AuthSub 、Yahoo‘s BBAuth、 Facebook Auth等。
相关术语
在弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:
OAUTH相关的三个URL:
Request Token URL: 获取未授权的Request Token服务地址;
User Authorization URL: 获取用户授权的Request Token服务地址;
Access Token URL: 用授权的Request Token换取Access Token的服务地址;
OAUTH相关的参数定义:
oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。
oauth_consumer_secret:oauth_consumer_key对应的密钥。
oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
oauth_signature: 用上面的签名方法对请求的签名。
oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
oauth_version: OAUTH的版本号,可选,其值必须为1.0。
OAUTH HTTP响应代码:
HTTP 400 Bad Request 请求错误
Unsupported parameter 参数错误
Unsupported signature method 签名方法错误
Missing required parameter 参数丢失
Duplicated OAuth Protocol Parameter 参数重复
HTTP 401 Unauthorized 未授权
Invalid Consumer Key 非法key
Invalid / expired Token 失效或者非法的token
Invalid signature 签名非法
Invalid / used nonce 非法的nonce
OAUTH认证授权流程
在弄清楚了OAUTH的术语后,我们可以对OAUTH认证授权的流程进行初步认识。其实,简单的来说,OAUTH认证授权就三个步骤,三句话可以概括:
1. 获取未授权的Request Token
2. 获取用户授权的Request Token
3. 用授权的Request Token换取Access Token
当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家肯能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。
QQ OAuth2.0开发流程
Step1. 准备工作
接入QQ登录前,需要首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对应用与用户进行验证与授权。
同时,需要保证连接畅通。
Step2. 放置QQ登录按钮
在移动应用界面上放置“QQ登录”按钮,并为按钮添加前台代码,实现点击按钮即弹出QQ登录对话框。
Step3. 获取Access Token
通过用户验证登录和授权,获取Access Token,为下一步获取用户的OpenID做准备;
同时,Access Token是应用在调用OpenAPI访问和修改用户数据时必须传入的参数。
access token由每次用户登录时生成,过期时间默认为三个月,用户再次登录时自动刷新,请移动应用做好防过期策略,或过期后提示用户再次授权。
QQ登录OAuth2.0针对移动应用接入,提供了登录验证和授权流程,主要提供以下获取access token的方式:
即OAuth官方文档中提到的Implicit模式,适用于需要通过客户端访问的方式。
Step4. 通过Access Token获取用户的OpenID
通过输入在上一步获取的Access Token,得到对应用户身份的OpenID。
OpenID是此网站上或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在网站上或应用中的原有账号进行绑定。
Step5. 调用OpenAPI,来请求访问或修改用户授权的资源
获取到Access Token后OpenID后,可通过调用OpenAPI来获取或修改用户个人信息。
调用OpenAPI时需要用到如下3个值:
YOUR_APP_ID:即申请QQ登录成功后分配的appid(如222222)
YOUR_ACCESS_TOKEN:Step3获取到的Access Token,必须保证未过期(如E0632E6CE12AC709999)
YOUR_OPENID:Step4获取到的OpenID,用户唯一标识(如B9DD537D1C5C98A9999)
本文出自 “林元煌的博客” 博客,请务必保留此出处http://lyhmm.blog.51cto.com/1797932/1934305
oAuth的认知以及开发流程