现在的位置: 首页 > 综合 > 正文

OAUTH认证介绍

2012年11月12日 ⁄ 综合 ⁄ 共 2412字 ⁄ 字号 评论关闭

一、OAUTH是什么?

(转载自:http://www.haogongju.net/art/25990)

OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是安全的。同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OAuth是开放的。业界提供了OAuth的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAuth是简易的。目前互联网很多服务如Open
API,很多大头公司GoogleYahoo,Microsoft等都提供了OAuth认证服务,这些都足以说明OAuth标准逐渐成为开放资源授权的标准。

在官方网站的首页,可以看到下面这段简介:

An open protocol to allow secure API authorizationin a simple and standard method from desktop andweb
applications.

大概意思是说OAuth是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAuth类似于Flickr
Auth、Google's AuthSub[1]、Yahoo's BBAuth、
Facebook
Auth等。

OAuth认证授权具有以下特点:

1. 简单:不管是OAuth服务提供者还是应用开发者,都很容易理解与使用;

2. 安全:没有涉及到用户密钥等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAuth,任何软件开发商都可以使用OAuth;

二、OAuth的认证流程

 

具体每步执行信息如下:

1. 第三方软件(我们自己开发的软件)向OAuth服务提供商请求未授权的Request Token。向Request Token
URL
发起请求,请求需要带上的以下参数:

 

2. OAuth服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者:

 

3. 使用者向OAuth服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥:

 

4. OAuth服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。在腾讯认证过程中此过程会定位到腾讯的授权页面,要求用户输入QQ号和密码,然后选择同意或者拒绝对应用授权。授权成功后客户端应用会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。返回参数:

 

5. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数:

 

6. OAuth服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。

 

7. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。

注:Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。

从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。

三、OAUTH相关术语

1、OAuth相关的三个URL: 

Request Token URL: 获取未授权的Request Token服务地址;

User Authorization URL: 获取用户授权的Request Token服务地址;

Access Token URL: 用授权的Request Token换取Access Token的服务地址;

2、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。

3、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

抱歉!评论已关闭.