腾讯auth认证

oauth认证流程

     oauth认证流程分为三步,首先根据腾讯分配的appKey和appSecret请求腾讯获取request_token地址,获取到oauth_token和oauth_token_secret。第二步用获取到的 oauth_token和oauth_token_secret拼接到腾讯授权URL地址后面进行用户的授权,授权通过后跳转地址会带回oauth_verifier参数。最后用 oauth_token、oauth_token_secret、oauth_verifier的数据请求交换access_token拿到交换后的oauth_token 和 oauth_token_secret。在三步认证过程中,第一步和第三步是需要用java程序按照腾讯oauth授权文档规范里面的方式请求详细地址获取对应数据。第二步是直接用第一步的oauth_token和oauth_token_secret请求腾讯授权地址:https://open.t.qq.com/cgi-bin/authorize?oauth_token=xxx&oauth_token_secret=xxx&oauth_callback_confirmed=true 腾讯oauth授权文档规范请参考官方网站http://open.t.qq.com/resource.php?i=1,1&j=0


 

oauth认证具体实现

      第一步、请求request_token

    请求地址:https://open.t.qq.com/cgi-bin/request_token

    请求参数:

      oauth_callback   请求request_token后的返回地址,应用时通过这个地址解析出oauth_token和oauth_token_secret后跳转到腾讯的授权地址https://open.t.qq.com/cgi-bin/authorize

    oauth_consumer_key 申请应用时腾讯分配的appKey

    oauth_nonce 官方说明是随机串(32个字符长度),但官方给出的demo里面是8位的随机串,我也用8位的,具体实现如下:

  

    private String getAauth_nonce() {

       //return RandomStringUtils.randomAlphanumeric(32);

       return String.valueOf(random.nextInt(9876599) + 123400);

    }

     oauth_signature_method 签 名方法(HMAC-SHA1)

     oauth_timestamp 时间戳,具体实现如下:

 

 

    private String getAauth_timestamp() {

       return String.valueOf(System.currentTimeMillis()).substring(0, 10);

    }

      oauth_version oauth版本号填(1.0)

     oauth_signature oauth请求签名,按照oauth认证算法将所有请求数据按规则拼接后用SecretKeySpec的doFinal方法获取到,拼接规则:请求方式(GET/POST)&URLEncoder后的请求地址,这里为https://open.t.qq.com/cgi-bin/request_token & URLEncoder后的所有参数,所有参数具体为 oauth_callback=URLEncoder后的oauth_callback&oauth_consumer_key=URLEncoder后的appKey&oauth_nonce=URLEncoder后的随机串&oauth_signature_method==URLEncoder后的HMAC-SHA1&oauth_timestamp=URLEncoder后的时间戳&oauth_version=URLEncoder后的1.0

具体实现如下:

 

 

    public String getAauth_signature(String datathrows Exception{

       byte[] byteHMAC = null;

       try {

           String bss = oauth_request_method "&" + URLEncoder.encode(requst_token_url,encoding) + "&";

           String bsss = URLEncoder.encode(dataencoding);

           String urlString = bss +bsss;

           System.out.println(urlString);

          

           String oauthKey =  URLEncoder.encode(consumer_secretencoding) + "&"

           + ((oauth_token_secret == null || oauth_token_secret.equals("")) ? "" : URLEncoder.encode(oauth_token_secret,encoding));

          

//         key = "";

//         urlString = "";

          

           System.out.println("oauthKey="+oauthKey);

           System.out.println("signatureBase="+urlString);

          

           Mac mac = Mac.getInstance("HmacSHA1");

           SecretKeySpec spec = new SecretKeySpec(oauthKey.getBytes("US-ASCII"),"HmacSHA1");

           mac.init(spec);

           byteHMAC = mac.doFinal((urlString).getBytes("US-ASCII"));

          

//         SecretKeySpec spec = new SecretKeySpec(key.getBytes(), "HmacSHA1");

//         mac.init(spec);

//         byteHMAC = mac.doFinal((bss+bsss).getBytes());

       catch (InvalidKeyException e) {

           e.printStackTrace();

       catch (NoSuchAlgorithmException ignore) {

          

       }

      

       String oauthSignature = new Base64Encoder().encode(byteHMAC);

       return oauthSignature;

    }

   将以上所有参数拼接到请求地址上通过java httpclient请求到https://open.t.qq.com/cgi-bin/request_token具体请求参考https://open.t.qq.com/cgi-bin/request_token?oauth_callback=http://qunmgr.qq.com/oauthapi/callback.php&oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac&oauth_nonce=b788149731e0ed75daa03a6e1e30427c&oauth_signature=zO5/gT/P6tbhBBZVuoyfjPwjdxY=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288932298&oauth_version=1.0请求后将会返回串oauth_token=a63f4a0e1242462fb8c11e53159ba294&oauth_token_secret=40ece707e064128e4fec692e3c09c692&oauth_callback_confirmed=trued到此第一步完成。

 

第二步、腾讯授权

     根据返回后的oauth_token请求https://open.t.qq.com/cgi-bin/authorize?oauth_token=80484decceb142dfaf5791c9cb9cd256 打开授权页面,输入您的QQ账号密码,点击授权,授权后跳转到第一步中指定的oauth_callback,并在url后面拼接了oauth_token=80484decceb142dfaf5791c9cb9cd256&oauth_verifier=47b9122eb2bb4a3ca642a78b34158193
两个参数,到这第二步完成。 

 

第三步、交换oauth_token

   第三步和第一步实现原理一样,请求参数里面多了oauth_token和oauth_verifier两个参数,注意腾讯官方文档的参数列表里面没有给出oauth_verifier但是多了oauth_callback这个多余的参数,让第一次使用的用户很迷惑。(PS:腾讯官方的文档很不严谨啊)但是下面的使用说明的请求列子里面有,官方使用说明如下:

https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac&oauth_nonce=35885b07fe7dc53942d405e552d086fe&oauth_signature=TXBihj/H4avLJaWmjYARDVVCu8M=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288933101&oauth_token=66ae88faecd14a1f8e826d35d5e857a7&oauth_verifier=1154e3657d5542338eece2767172da02&oauth_version=1.0

请求后返回oauth_token=ffc37464473e48a2b22226350dc98210&oauth_token_secret=3fe92ec42e936672ceca549d432c237d&name=starjiang

这里的oauth_token和oauth_token_secet就是交换后的token,到此,获取oauth工作全部完成,剩下的就是微博的使用问题了,我就不多做介绍了,然后附上完整源码给大家分享一下,
  代码写的很粗鲁,各位不要见笑。
  大家有改进意见也多多指教,学习学习

下载地址: http://www.geelou.com/QQWeiBo.rar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值