腾讯开放平台中实现QQ登陆的功能

开发 开发工具
这昨天为自己的网站实现了QQ登陆的功能,虽然,没有进行绑定,但是在技术层面上来说,已经了解了一点腾讯开放平台的协议。

这昨天为自己的网站实现了QQ登陆的功能,虽然,没有进行绑定,但是在技术层面上来说,已经了解了一点腾讯开放平台的协议。

具体什么是OAUTH,请您GG一下吧...

 

关于腾讯的开放平台,最主要的就是参数一定不能多,能有的要有,不能有的一定不能有.不然提交过去,就会提示什么什么错了。

最关键的就是签名的方式,下面就是我的签名的代码:

  1. /// <summary>  
  2.          /// 每一步不同的生成签名的方式  
  3.          /// </summary>  
  4.          /// <returns></returns>  
  5.          protected virtual String BuildSignature(String SignatureHost)  
  6.          {  
  7.              String PostMethodString = "GET&";  
  8.              StringBuilder ParamString = new StringBuilder();  
  9.              this.CurrentStepParameters  
  10.                  .OrderBy(c => c.Key.ToString())  
  11.                  .ToList()  
  12.                  .ForEach(c =>  
  13.                          {  
  14.                              if (c.Key != OAuthParameterName.oauth_signature &&  
  15.                                  c.Key != OAuthParameterName.timestamp)  
  16.                              {  
  17.                                  if (ParamString.Length > 0)  
  18.                                  {  
  19.                                      ParamString.Append("&");  
  20.                                  }  
  21.                                  var p = c.Value;  
  22.                                  ParamString.Append(p.OAuthOringinaName);  
  23.                                  ParamString.Append("=");  
  24.                                  ParamString.Append(p.Value);  
  25.                              }  
  26.                          }  
  27.                  );  
  28.              StringBuilder SignData = new StringBuilder();  
  29.              SignData.Append(PostMethodString);  
  30.              SignData.Append(OAuthHelper.UrlEncode(SignatureHost));  
  31.              SignData.Append("&");  
  32.              SignData.Append(OAuthHelper.UrlEncode(ParamString.ToString()));  
  33.    
  34.              //密钥  
  35.              String SecretKey = String.Format("{0}&{1}"this.AppKey, this.AuthorizedTokenKey);  
  36.              String SignContent = SignData.ToString();  
  37.              String Signature = Convert.ToBase64String(OAuthHelper.HMACSHA1Code(SignContent, SecretKey));  
  38.              return Signature;  
  39.          } 

这里的CurrentStepParameters是在构造方式里进行赋值,或者其它地方,签名里最关键的,就是oauth_signature和timestamp这两个参数,要记得去掉,在这里,我选择了过滤。

因为有的时候,CurrentStepParameters这个字典从querystring来生成的话会简单点还有能复用。

在所有参数中,有几个是经常会用到的。

所以,在此我建立了一个通用参数生成方法。

  1. protected virtual void AddCommonParameters()  
  2.          {  
  3.              if (this.CurrentStepParameters != null)  
  4.              {  
  5.                  //增加通用参数  
  6.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_consumer_key, this.AppID);  
  7.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_nonce, DateTime.UtcNow.Ticks.ToString());  
  8.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_timestamp, OAuthHelper.GenerateTimestamp());  
  9.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_version, "1.0");  
  10.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_signature_method, "HMAC-SHA1");  
  11.                  this.CurrentStepParameters.AddParam(OAuthParameterName.oauth_client_ip, "1");  
  12.    
  13.                  if (this.CurrentStepParameters.ContainsKey(OAuthParameterName.oauth_token_secret))  
  14.                  {  
  15.                      this.AuthorizedTokenKey = CurrentStepParameters[OAuthParameterName.oauth_token_secret].Value;  
  16.                  }  
  17.    
  18.                  if (this.CurrentStepParameters.ContainsKey(OAuthParameterName.oauth_signature))  
  19.                  {  
  20.                      CurrentStepParameters.Remove(OAuthParameterName.oauth_signature);  
  21.                  }  
  22.    
  23.                  if (this.CurrentStepParameters.ContainsKey(OAuthParameterName.timestamp))  
  24.                  {  
  25.                      CurrentStepParameters.Remove(OAuthParameterName.timestamp);  
  26.                  }  
  27.              }  
  28.          } 

下面是一个测试地址:http://www.changshu.so/Tencent ,之后等完成绑定后,地址会删除。

组件下载地址:http://files.cnblogs.com/sam251/CSCMS.Secrity.OAuth.rar 

后续还有绑定的需要自己去实现了。如果能有通用的方式,我会定时更新,另外,其它OAUTH,比如SINA的,正在研究。

本程序里的OAuthHelper.GenerateTimestamp()及OAuthHelper.UrlEncode都是来自网上其它朋友的方法。

源不源码也没有什么重要了。因为整合在自己的网站里,所以,只是给出了一个DLL,要源码的可以找我,我可以发你。

原文链接:http://www.cnblogs.com/sam251/archive/2011/09/15/oauth_tencent.html

【编辑推荐】

  1. 腾讯微博开放平台正式推出LBS接口
  2. 国内开放平台谁将***个死去?
  3. 盛大开放平台案例:PHPCMS
  4. 淘宝开放平台案例:卷豆网
  5. 腾讯开放平台案例:游戏谷
责任编辑:林师授 来源: 小宇.net的博客
相关推荐

2013-01-04 17:44:59

2011-12-08 15:33:25

腾讯微博开放平台

2011-07-20 09:27:37

Scala

2009-02-20 14:54:33

SNS

2011-06-15 10:00:48

腾讯页游《七雄争霸》将

2014-11-28 15:41:29

.NET

2011-12-13 15:35:54

腾讯开放平台

2011-12-08 15:54:03

腾讯开放平台

2014-11-18 15:05:50

QQ

2011-05-31 10:26:37

Android 对话框

2010-08-18 08:21:49

Adobe AIRAndroid

2014-12-02 10:22:38

腾讯云微信开放平台云分析

2012-06-06 16:17:27

Windows 8 RQQ应用

2011-12-13 15:45:39

2013-12-13 13:54:05

移动应用

2009-07-16 15:14:27

WebWork用户登陆

2011-12-25 20:25:22

iPhone

2014-07-01 10:01:36

Go安卓开发

2009-01-12 17:34:11

服务器虚拟化VMware

2015-03-16 11:24:01

阿里云腾讯云云计算
点赞
收藏

51CTO技术栈公众号