zoukankan      html  css  js  c++  java
  • 新浪微博——OAuth

    这几天在做新浪微博客户端,由于以前接触的大多为Socket编程,而对于Http协议编程还存在不少盲区,所以费了不少功夫,好了、闲话少说,总结一下。

    一、OAuth概述
    为了使用新浪微博开放平台提供的API(应用程序接口),你需要先注册一个应用。我们会给每一个应用一个专属的App Key和App Secret。Key跟Secret的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将key和secret结合,为你发出的每个请求添加签名,以此来向新浪微博开放平台表明自己身份的合法性。


    二、OAuth认证基本流程

    OAuth提供两种认证方式:query-string和http headers。我们推荐使用http header进行认证。

    其中需要的几个URL

    public const string HTTP_REQUEST_TOKEN = "http://api.t.sina.com.cn/oauth/request_token";
    public const string HTTP_AUTHORIZE = "
    http://api.t.sina.com.cn/oauth/authorize";
    public const string HTTP_ACCESS_TOKEN = "
    http://api.t.sina.com.cn/oauth/access_token";

    public const string HTTP_VERIFY = "http://api.t.sina.com.cn/account/verify_credentials.json";

     

    三、请求签名

    所有的OAuth请求使用同样的算法来生成(signature base string)签名字符基串和签名。

    base string是把http方法名,请求URL以及请求参数用&字符连起来后做URL Encode编码。具体来讲,base string由http方法名,之后是&,接着是过url编码(url-encoded)之后的url和访问路径及&。接下来,把所有的请求参数包括POST方法体中的参数,经过排序(按参数名进行文本排序,如果参数名有重复则再安参数值进行重复项目排序),使用%3D替代=号,并且使用%26作为每个参数之间的分隔符,拼接成一个字符串。

    这个算法可以简单表示为:

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

    无论生成何种OAuth1.0请求,生成BASE STRING的规则始终不变。

    新浪微博要求所有的OAuth请求都使用HMAC-SHA1算法生成签名。

     

    注意:
    1)用于生成“签名字符基串”的参数是要经过排序的。
    2)用于生成“签名字符基串”的参数是请求中带有所有参数[包括Get、Post请求的所有参数,但是有一个特例:即使用Post请求 以 “multipart/form-data” 格式传输文件时、只有以oauth_开头的参数才能参与生成“签名字符基串”]
    3)每一个参与生成“签名字符基串”的参数值都要经过URL Encode编码。

    OAuth提供两种认证方式:query-string和http headers。

    如果是Querty-String认证大致的请求格式如下:
    ……&oauth_signature=UrlEncoHMAC-SHA1算法对“签名字符基串”进行加密生成的签名]);

    如果是Http headers认证,则需要在http协议头中加入一个键值对:
    “键”为 “Authorization”
    “值”为   "OAuth "+【所有参数【包括oauth_signature这个参数、生成签名字符基串需要参数排序,但生成这个字符串不需要参数排序】使用 =分割 键与值,使用“逗号加一个空格”作为参数间的分隔符 】,生成后的形式大致为:"OAuth oauth_consumer_key=\"{0}\", oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"{1}\", oauth_nonce=\"{2}\", oauth_version=\"1.0\", oauth_token=\"{3}\",oauth_signature=\"{4}\""


    关于更多的新浪微博OAuth请参见:http://open.weibo.com/wiki/Oauth



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    MySQL数据库的完全备份与恢复
    MySQL数据库之索引、事务、存储引擎详细讲解
    LNMP架构介绍与部署
    Haproxy搭建Web集群
    LAMP环境之MySQL服务安装详细过程
    MySQL主从复制详解
    LAMP环境之编译安装httpd服务
    搭建yum软件仓库,让你维护轻松自如
    Shell脚本一键安装Samba服务
    Shell脚本之冒泡排序
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2183301.html
Copyright © 2011-2022 走看看