OAuth的原理认证流程及访问资源流程

OAuth的原理认证流程及访问资源流程

图 1 授权流程

腾讯微博API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程

  1. 1.获取未授权的Request Token(temporary credentials)
  2. 2.请求用户授权Request Token
  3. 3.使用授权后的Request Token换取Access Token(token credentials)
  4. 4.使用 Access Token 访问或修改受保护资源

其中1~3步使用https方式, 第4步使用http方式。


请求签名说明

所有TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。

图 1 授权流程

说明:

Signature Base String由以下三部分组成,各项之间使用&符号分隔。

1、Http Method
请求方法,GET/POST

2、URL Encode之后的请求URL(URL要小写)
例如:
请求URL:https://open.t.qq.com/cgi-bin/request_token
经URL Encode之后的请求URL为:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token

3、URL Encode并排序之后的请求参数
例如: URL请求参数为:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
经URL Encode并排序之后的请求参数格式如下(参数间使用%26(即&符号)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0

算法伪码:

httpMethod + "&" +
  url_encode(  base_uri ) + "&" +
  sorted_query_params.each  { | k, v |
      url_encode ( k ) + "%3D" +
      url_encode ( v )
  }.join("%26")

密钥由App Secret和Token Secret组成(中间使用&符号分隔)
签名算法目前只支持HMAC-SHA1。

获取未授权的Request Token

通过访问以下 URL 获取未授权的 Request Token

https://open.t.qq.com/cgi-bin/request_token

请求参数

参数意义
oauth_consumer_keyApp Key(应用信息中的App Key值)
oauth_signature_method签名方法,暂只支持HMAC-SHA1
oauth_signature签名值,密钥为:App Secret。计算说明。
oauth_timestamp时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数
oauth_nonce单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_callback认证成功后浏览器会被重定向到这个url中
oauth_version(可选)版本号,如果有必须为“1.0”

返回参数

参数意义
oauth_token未授权的Request Token
oauth_token_secret对应的Request Token Secret
oauth_callback_confirmed对oauth_callback的确认信号

说明:

① 用户授权后web应用将会重定向到oauth_callback。当应用为pc客户端或手机客户端应用时,没有回调url(oauth_callback)的概念,此时设置为字符串null即可。字符串“null”必须是小写

② 时间戳与标准时间偏差不得大于8分钟。

示例:

request_token

https://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0

参数名参数值
oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
oauth_signature_methodHMAC-SHA1
oauth_signatureexxzU/tTbpdicmYHcyYh5kqgYgo=
oauth_timestamp1299569145
oauth_nonceyQDMuXvdcEfQs2Mzf3XcT1r36WTULJls
oauth_callbacknull
oauth_version1.0

返回结果:

oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true

参数名参数值
oauth_tokenhdk48Djdsa
oauth_token_secretxyz4992k83j47x0b
oauth_callback_confirmedtrue

请求用户授权Request Token

此步骤的目的是请求用户授权Request Token,请求URL:

https://open.t.qq.com/cgi-bin/authorize

请求参数:

参数意义
oauth_token上一步中获得的未授权的Request Token

返回参数:

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

说明:

①此页面中会要求用户登陆,然后选择同意或者拒绝对应用授权。

②授权成功后:

  • A: web应用会重定向到oauth_callback所指定的URL(含返回参数)。
  • B: 客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。

示例:

参数意义
oauth_tokenhdk48Djdsa
oauth_verifier473f82d3

oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

使用授权后的Request Token换取Access Token

用户完成授权后,第三方应用可以通过访问如下url,将已授权的Request Token换取Access Token。Access Token将被用于访问或修改受限资源。

https://open.t.qq.com/cgi-bin/access_token

请求参数:

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

返回参数:

参数意义
oauth_tokenAccess Token
oauth_token_secreateAccess Token Secret

说明:

  • ①本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)
  • ②获得返回值后就可以使用Access Token来访问资源了。
  • ③Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。
    • 用于签名的Signature Base String格式如下:

      示例:access_token:

      https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0

      参数意义
      oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
      oauth_token6b99583b7bc8446bb57e86128158994f
      oauth_signature_methodHMAC-SHA1
      oauth_signature209vcEaHkmb/QwHqsRU3HRPvlqw=
      oauth_timestamp1299569210
      oauth_noncey2FrX7Muouma5vxWTKngEb7uHkRu4P5u
      oauth_verifier877973
      oauth_version(可选)1.0

      返回结果:

      oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00

      参数意义
      oauth_tokenoauth_token_secreate
      nnch734d00ls2jdkpdkkdhi9sl3r4s00

      至此,您的应用就取得了用户的授权,请妥善保管获得的Access Token和Access Token Secret。

      此后,您的应用就可以使用该Access Token访问腾讯微博了。

      使用Access Token访问腾讯微博

      获得Access Token之后,您的应用就可以使用该Access Token访问腾讯微博。

      在每次调用接口API时,请求都必须包含以下参数:

      参数意义
      oauth_consumer_keyAppKey
      oauth_tokenAccess Token
      oauth_signature_method签名方法,暂只支持HMAC-SHA1
      oauth_signature签名值,密钥为:App Secret&Access Token Secret。计算说明。
      oauth_timestamp时间戳
      oauth_nonce单次值

      示例:

      调用API:http://open.t.qq.com/api/t/add 发布一条微博:

      参数包括:
      1)接口参数:content和format;
      2)OAuth协议参数

      参数参数值
      content%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81
      formatjson
      oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
      oauth_nonceTld5QvrtTlRJvaSWPlCC7DIXxnTBeumD
      oauth_signatureJuPSe7ibf0uPECp4HcX4Fu9y3l0=
      oauth_signature_methodHMAC-SHA1
      oauth_timestamp1299569293
      oauth_tokenb8c8f1a888ea4f2887eac88787b6e895
      oauth_version1.0

      post:

      http://open.t.qq.com/api/t/add?content=%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81&format=json&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD&oauth_signature=JuPSe7ibf0uPECp4HcX4Fu9y3l0=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569293&oauth_token=b8c8f1a888ea4f2887eac88787b6e895&oauth_version=1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值