设为首页收藏本站

UNIX技术社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: console
查看: 2011|回复: 0

开放平台_OAuth1.0

[复制链接]
发表于 2012-6-2 18:06:22 | 显示全部楼层 |阅读模式
OAuth1.0简介

oauth1.0RFC制定的标准的第三方网站/客户端的认证服务
规范文档在:
http://www.ietf.org/rfc/rfc5849.txt

网站使用oauth的目的是不让第三方开发者知道和记录用户的用户名和账号信息,用户在第三方应用登录服务的时候是在客户端提供的登录页面进行登录和验证的。

国内几家大型网站都已经实现了oauth1.0,比如微博,腾讯,开心等

下面以weibooauth1.0实现为例说明:



oauth认证分服务器端和客户端

客户端的步骤是:
1 获取未授权的Request Token
2 请求用户授权Request Token
3 使用授权后的Request Token换取Access Token

服务器端的步骤是:
1 发放未授权request_token
2 将用户转到本网站的用户登录页
3 用户登录成功后,返回授权后的request_token和凭证
4 发放最终可以使用的凭证access_token

具体客户端和服务器端操作说明:
1
注册组件
当第三方在服务器网站注册了一个第三方组件,会获得appkeysecret
appkey是第三方组件的唯一标识
secret是第三方组件用来加密或其他处理的密钥(这个信息只有第三方应用和服务器端有)

2
客户端请求未授权的RequestToken

接口:
http://api.t.sina.com.cn/oauth/request_token

调用的参数
参数名
必选
介绍
oauth_consumer_key
true
API Key(组件信息中的APP Key值)
oauth_signature_method
true
签名方法,暂只支持HMAC-SHA1
oauth_signature
true
签名值
oauth_timestamp
true
时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数
oauth_nonce
true
单次值,随机生成的32位字符串(每次请求必须不同)
oauth_callback
true
认证成功后浏览器会被重定向到这个url中
oauth_version
flase
版本号,如果填写必须为1.0

其中的参数说明
oauth_signature 是使用secret进行签名
oauth_callbackoauth_timestamp是为了放重放的

3
服务器端接收到request_token的未授权请求
应该有如下行为:
1 生成request_tokenrequest_secret
2 在服务器端记录下生成的request_tokenrequest_secret
3 返回request_tokenrequest_secret


4
客户端接收到返回回来的request_tokenrequest_secret,使用这两个值来请求授权的request_token(即认证)

接口:
http://api.t.sina.com.cn/oauth/authorize

请求参数:
参数名
必选
意义
oauth_token
true
上一步中获得的未授权的Request Token

5
服务器端收到认证请求
做如下操作:
1 将请求的oauth_token和服务器端已存的oauth_token进行比较,正确执行2,错误返回异常
2 将客户端(比如浏览器)转到用户在weibo上的认证页面

6
客户端展示认证页面提供给用户登录认证

7
用户登录认证成功

8
服务器端等待用户登录认证成功之后
1 生成request_token已验证的凭证oauth_verifier
2 将request_token和用户ID,应用ID,验证码oauth_verifier进行映射,并存储
3 返回给客户端信息:

参数名
必选
意义
oauth_token
true
用户授权之后的Token值,与未授权Token值相同
oauth_verifier
true
验证码

oauth_verifier是已验证凭证
4 转到用户请求未授权request_token时请求的oauth_callback地址
(一般第二步和第三步是同时进行的,转到的oauth_callback地址的同时传递结果)


9
请求access_token
客户端现在已经有了:
appkey //组件申请时获得
secret //组件申请时获得
request_token//组件请求未授权request_token时获得
request_secret//组件请求未授权request_token时获得
oauth_veifier//组件请求授权request_token时获得

将secret&request_secret作为加密的key对参数进行加密请求:
(这步是来请求可以直接使用的凭证access_token)


参数
参数名
必选
意义
oauth_consumer_key
true
API Key
oauth_token
true
第一步中获得的Request Token
oauth_signature_method
true
签名方法,暂只支持HMAC-SHA1
oauth_signature
true
签名值,(密钥为:APP Secret&Request Token   Secret)
oauth_timestamp
true
时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数
oauth_nonce
true
单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_verifier
true
上一步请求授权request token时返回的验证码
oauth_version
flase
版本号,如果填写必须为1.0

10
服务器端获取到access_token的请求做如下操作:
1 校验request_token是否正确且已经被授权过(校验的内容有1 签名2 oauth_verifier 3 oauth_token)
2 生成access_token和access_token_secret
3 将access_token,access_token_secret,用户ID,应用ID进行映射,并存在服务器数据库(长期有效)
3 将access_token和access_token_secret返回

11
客户端使用access_tokenaccess_token_secret进行其他接口的请求

参考文章:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表