用于新浪微博,腾讯QQ,淘宝 OAUTH2.0 登陆的NET类库封装

开发 后端
目前开放OAuth2互联接口比较常用的有新浪微博,腾讯QQ,淘宝,其实还有微信,只是微信的我木有申请下来,因为手续麻烦,貌似需要扫描它的协议签字然后发过去,所以就放弃封装微信OAuth2登陆接口了,待以后给补上!关于淘宝OAuth网站接入登陆目前淘宝是暂停审核了貌似,也许是因为财大气粗比较任性吧,不过你还是可申请账号的,可以做应用提交给淘宝。

目前开放OAuth2互联接口比较常用的有新浪微博,腾讯QQ,淘宝,其实还有微信,只是微信的我木有申请下来,因为手续麻烦,貌似需要扫描它的协议签字然后发过去,所以就放弃封装微信OAuth2登陆接口了,待以后给补上!关于淘宝OAuth网站接入登陆目前淘宝是暂停审核了貌似,也许是因为财大气粗比较任性吧,不过你还是可申请账号的,可以做应用提交给淘宝。

需要源代码的小伙伴请猛戳这里下载,需要已经编译好Dll的小伙伴请猛戳这里下载

一。 下面给出各个OAuth2.0申请合作的地址:

-- sinaweibo OAuth2.0 --

申请接入OAuth2合作地址:http://open.weibo.com (微博.开放平台)
授权Url: https://api.weibo.com/oauth2/authorize?client_id=你的ClientId&redirect_uri=你的回调Url&response_type=code&display=default%20&state=sinaweibo

-- qq OAuth2.0 --

申请接入OAuth2合作地址: http://connect.qq.com (所谓的QQ互联,貌似还有一个http://open.qq.com,但这个我还木有用过,就先用QQ互联吧反正是可以登陆)
授权Url: http://openapi.qzone.qq.com/oauth/show?which=Login&display=pc&client_id=你的ClientId&redirect_uri=你的回调Url&response_type=code&display=default%20&state=qq

-- taobao OAuth2.0 --

申请接入OAuth2合作地址:http://open.taobao.com/index.htm
授权Url: https://oauth.taobao.com/authorize?client_id=你的ClientId&redirect_uri=你的回调Url&response_type=code&display=default%20&state=taobao

-- WeiXin OAuth2.0 --

申请接入OAuth2合作地址:https://open.weixin.qq.com

下面开始给dotNET平台的小伙伴们发福利啦,封装了一个类实现了接入到新浪微博,腾讯QQ,淘宝,和获取用户信息,就实现了下面的2个接口,分别是IOAuthClient和IUserInterface。

  1. namespace GeRenXing.OpenPlatform 
  2.     public interface IOAuthClient 
  3.     { 
  4.         AuthOption Option { get; } 
  5.         AuthToken Token { get; } 
  6.         IUserInterface User { get; } 
  7.   
  8.         String GetAuthorizeUrl(ResponseType responseType); 
  9.         AuthToken GetAccessTokenByAuthorizationCode(string code); 
  10.         AuthToken GetAccessTokenByPassword(string passport, string password); 
  11.         AuthToken GetAccessTokenByRefreshToken(string refreshToken); 
  12.         String Get(String url, params RequestOption[] options); 
  13.         String Post(String url, params RequestOption[] options); 
  14.     } 

需要封装更多api的请自行扩展,也可以直接调用IOAuthClient的Get和Post方法直接传递参数快速访问api。

新浪微博和淘宝在获取Token的时候就把OpenId直接返回给你了,而腾讯QQ的OAuth2.0接入里获取Token是不会返回OpenId的,需要单独访问https://graph.qq.com/oauth2.0/me获取OpenId,对于这个不同点我在封装的腾讯QQ ParseAccessToken 方法里面已经自动处理了,就是再次发起了一次获取用户Open Id的请求。

各位小伙伴注意啦:访问授权Url返回的Code码只能使用一次,否则会报下面这个错误:

{"error":"invalid_grant","error_code":21325,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_description":"invalid authorization code:2c2cb4e1f6b70650acbe1dad757ea6bb"}

二。 下面做了个测试的控制台程序,ClientId和ClientSecret,CallbackUrl请改为自己的。

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Diagnostics; 
  6.   
  7. using GeRenXing.OpenPlatform; 
  8.   
  9. namespace GeRenXing.OpenPlatform.Test 
  10.     class Program 
  11.     { 
  12.         private static Dictionary<String, IOAuthClient> m_oauthClients; 
  13.         static void Main(string[] args) 
  14.         { 
  15.             //初始化开放平台客户端(请替换成自己的ClientId,ClientScrert,CallbackUrl) 
  16.             m_oauthClients = new Dictionary<string, IOAuthClient>(); 
  17.             m_oauthClients["sinaweibo"] = new OpenPlatform.OAuthClient.SinaWeiBoClient("You ClientId""You ClientScrert""You Callback Url"); 
  18.             m_oauthClients["qq"] = new OpenPlatform.OAuthClient.TencentQQClient("You ClientId""You ClientScrert""You Callback Url"); 
  19.             m_oauthClients["taobao"] = new OpenPlatform.OAuthClient.TaoBaoClient("You ClientId""You ClientScrert""You Callback Url"); 
  20.   
  21.             //测试 
  22.             OAuthTest("sinaweibo"); 
  23.             //OAuthTest("qq"); 
  24.             //OAuthTest("taobao"); 
  25.   
  26.             Console.ReadKey(true); 
  27.         } 
  28.   
  29.         private static void OAuthTest(String platformCode) 
  30.         { 
  31.             String authorizeUrl = String.Empty; 
  32.             if (String.IsNullOrEmpty(platformCode)) platformCode = "sinaweibo"
  33.   
  34.             Console.WriteLine("OpenPlatform Request For " + platformCode); 
  35.             Console.WriteLine(""); 
  36.   
  37.             IOAuthClient oauthClient = m_oauthClients[platformCode]; 
  38.             oauthClient.Option.State = platformCode; 
  39.   
  40.             //***步:获取开放平台授权地址 
  41.             authorizeUrl = m_oauthClients[platformCode].GetAuthorizeUrl(ResponseType.Code); 
  42.             Console.WriteLine("Step 1 - OAuth2.0 for Redirect AuthorizeUrl: "); 
  43.             Console.WriteLine(authorizeUrl); 
  44.   
  45.             //第二步:打开IE浏览器获取Code 
  46.             Process p = new Process(); 
  47.             ProcessStartInfo psi = new ProcessStartInfo(); 
  48.             psi.Arguments = authorizeUrl; 
  49.             psi.FileName = "C:\\Program Files\\Internet Explorer\\iexplore.exe"
  50.             p.StartInfo = psi; 
  51.             p.Start(); 
  52.   
  53.             Console.WriteLine(""); 
  54.             Console.WriteLine("OAuth2.0 Input Server Response Code"); 
  55.             String code = Console.ReadLine(); 
  56.   
  57.             //第三步:获取开放平台授权令牌 
  58.             oauthClient = m_oauthClients[platformCode]; 
  59.             AuthToken accessToken = oauthClient.GetAccessTokenByAuthorizationCode(code); 
  60.             if (accessToken != null
  61.             { 
  62.                 Console.WriteLine(""); 
  63.                 Console.WriteLine("Step 2 - OAuth2.0 for AccessToken: " + accessToken.AccessToken); 
  64.                 //输出原始响应数据 
  65.                 Console.WriteLine("GetAccessToken Raw Response : "); 
  66.                 Console.WriteLine(oauthClient.Token.TraceInfo); 
  67.   
  68.                 //第四步:调用开放平台API,获取开放平台用户信息 
  69.                 dynamic oauthProfile = oauthClient.User.GetUserInfo(); 
  70.   
  71.                 //输出解析出来的用户昵称 
  72.                 Console.WriteLine(""); 
  73.                 Console.WriteLine("Step 3 - Call Open API UserInfo: "); 
  74.                 Console.WriteLine("UserInfo Nickname: " + oauthClient.Token.User.Nickname); 
  75.                 //输出原始响应数据 
  76.                 Console.WriteLine("GetUserInfo Raw Response : "); 
  77.                 Console.WriteLine(oauthClient.Token.TraceInfo); 
  78.             } 
  79.         } 
  80.     } 

三。 下面给出几张测试的截图:

SianWeiBo Oauth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++
QQ OAuth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++

 

++++++++++++++++++++++++++++++++++++++++++++++++++++
TaoBao OAuth2.0
++++++++++++++++++++++++++++++++++++++++++++++++++++

 

责任编辑:张伟 来源: 博客园
相关推荐

2020-09-07 14:00:23

腾讯微博微信互联网

2015-03-21 06:41:50

oauth2.0监控宝

2012-02-15 17:17:02

开放平台

2013-06-17 10:39:32

淘宝阿里巴巴新浪微博

2012-11-20 10:36:38

新浪微博

2013-06-24 09:28:53

大数据挖掘

2021-08-02 06:49:46

OIDC认证协议

2020-09-14 17:05:16

腾讯微博新浪

2020-09-29 17:50:29

腾讯微博关闭

2012-02-15 17:09:34

开放平台

2013-07-10 14:15:38

php新浪微博

2022-03-16 00:07:55

OAuth2授权框架

2021-11-19 06:50:17

OAuth协议授权

2015-09-24 18:08:50

微博架构架构演进架构

2011-07-20 09:27:37

Scala

2022-08-15 08:34:08

OauthCAS登录

2013-07-01 18:34:47

个推案例新浪微博

2011-12-08 16:10:18

2015-01-21 15:28:16

Android源码新浪微博

2011-07-22 10:38:55

HTC新浪Facebook
点赞
收藏

51CTO技术栈公众号