Oauth2认证以及新浪微博开放平台应用

一、OAuth2.0概述

大部分API的访问如发表微博、获取私信,关注都需要用户身份,目前新浪微博开放平台用户身份鉴权有OAuth2.0和Basic Auth(仅用于应用所属开发者调试接口),新版接口也仅支持这两种方式。OAuth2.0较1.0相比整个授权验证流程更简单更安全,也是未来最主要的用户身份验证和授权方式。 关于OAuth2.0协议授权流程查看OAuth2.0授权流程 ,其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,Resource Server是API服务器。

参考链接:http://blog.unvs.cn/archives/oauth-qq2.0-developer.html 以及新浪微博开放平台和新浪微博CodeProject开源项目

开发者可以先浏览OAuth2.0的接口文档,熟悉OAuth2的接口及参数的含义,然后我们根据应用场景各自说明如何使用OAuth2.0。

OAuth2 接口文档

接口 说明
OAuth2/authorize 请求用户授权Token
OAuth2/access_token 获取授权过的Access Token
OAuth2/get_token_info 授权信息查询接口
OAuth2/revokeoauth2 授权回收接口
OAuth2/get_oauth2_token OAuth1.0的Access Token更换至OAuth2.0的Access Token

二、OAuth2.0 新浪授权页

1、首先要获取appKey 和 appSecret,这个获取的方法可以从新浪微博新手指南 根据步骤一步一步的获取到。callBack地址这里采用默认的:https://api.weibo.com/oauth2/default.html,采用的是网站接入方式。下面是C#示例源码(控制台应用程序):

01.using System;  

02.using System.Collections.Generic;  

03.using System.Linq;  

04.using System.Text;  

05.using NetDimension.Weibo;  

06.using System.Net;  

07.  

08.namespace SinaWeiboTestApp  

09.{  

10.    class Program  

11.    {  

12.  

13.        static void Main(string[] args)  

14.        {  

15.  

16.        string appkey = "124543453288";  

17.        string appsecret = "3a456c5332fd2cb1178338fccb9fa51c";  

18.        //string callBack = "http://127.0.0.1:3170/WebSite2/Default.aspx";  

19.        string callBack = "https://api.weibo.com/oauth2/default.html";  

20.        var oauth = new NetDimension.Weibo.OAuth(appkey,appsecret,callBack);  

21.  

22.        ////模拟登录  

23.        //string username = "[email protected]";  

24.        //string password = "xxxxxxx";  

25.        //oauth.ClientLogin(username, password); //模拟登录下,没啥好说的,你也可以改成标准登录。  

26.  

27.        //标准登录  

28.        var authUrl = oauth.GetAuthorizeURL();  

29.        //string redirectUrl;  

30.        //HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(authUrl);  

31.        //request.Referer = authUrl;  

32.        //request.AllowAutoRedirect = false;  

33.        //using (WebResponse response = request.GetResponse())  

34.        //{  

35.        //    redirectUrl = response.Headers["Location"];  

36.        //    redirectUrl = response.ResponseUri.AbsolutePath;  

37.        //}  

38.        System.Diagnostics.Process.Start(authUrl);  

39.        Console.WriteLine("填写浏览器地址中的Code参数:");  

40.        var code = Console.ReadLine();  

41.        var accessToken = oauth.GetAccessTokenByAuthorizationCode(code);  

42.        if (!string.IsNullOrEmpty(accessToken.Token))  

43.        {  

44.            var sina = new NetDimension.Weibo.Client(oauth);  

45.            var uid = sina.API.Dynamic.Account.GetUID(); //调用API中获取UID的方法  

46.            Console.WriteLine(uid);  

47.        }  

48.  

49.            var Sina = new Client(oauth);  

50.            Console.WriteLine("开始发送异步请求...");  

51.  

52.            //例子1:异步获取用户的ID  

53.            //demo的运行环境是.net 4.0,下面展示的这种方法在2.0及以上版本环境下有效,3.0以上可以用lambda表达式来简化delegate的蛋疼写法,请看下面的例子。  

54.            Sina.AsyncInvoke<string>(  

55.                //第一个代理中编写调用API接口的相关逻辑  

56.            delegate()  

57.            {  

58.                Console.WriteLine("发送请求来获得用户ID...");  

59.                System.Threading.Thread.Sleep(8000); //等待8秒  

60.                return Sina.API.Entity.Account.GetUID();  

61.            },  

62.                //第二个代理为回调函数,异步完成后将自动调用这个函数来处理结果。  

63.            delegate(AsyncCallback<string> callback)  

64.            {  

65.                if (callback.IsSuccess)  

66.                {  

67.                    Console.WriteLine("获取用户ID成功,ID:{0}", callback.Data);  

68.                }  

69.                else 

70.                {  

71.                    Console.WriteLine("获取用户ID失败,异常:{0}", callback.Error);  

72.                }  

73.            }  

74.             );  

75.  

76.            //列子2:获取公共微博列表  

77.            //2.0以上用lambda来写,方便不是一点点  

78.            Sina.AsyncInvoke<NetDimension.Weibo.Entities.status.Collection>(() =>  

79.            {  

80.                //获取微博,接口调用,返回值是个NetDimension.Weibo.Entities.status.Collection,所以泛型T为NetDimension.Weibo.Entities.status.Collection  

81.                Console.WriteLine("发送请求来获得公共微博列表...");  

82.                return Sina.API.Entity.Statuses.PublicTimeline();  

83.                //return Sina.API.Entity.Statuses.RepostTimeline;  

84.            }, (callback) =>  

85.            {  

86.                if (callback.IsSuccess)  

87.                {  

88.                    //异步完成后处理结果,result就是返回的结果,类型就是泛型所指定的NetDimension.Weibo.Entities.status.Collection  

89.                    Console.WriteLine("获得公共微博列表成功,现在公共频道发微博的人都是他们:");  

90.                    foreach (var status in callback.Data.Statuses)  

91.                    {  

92.                        if (status.User != null)  

93.                            Console.WriteLine(status.User.ScreenName + " ");//打印公共微博发起人的姓名  

94.                    }  

95.                    Console.WriteLine();  

96.                }  

97.                else 

98.                {  

99.                    Console.WriteLine("获取用户ID失败,异常:{0}", callback.Error);  

100.                }  

101.  

102.            });  

103.  

104.  

105.            Console.WriteLine("已发送所有异步请求。等待异步执行完成...");  

106.  

107.            Console.ReadKey(); //阻塞,等待异步调用执行完成  

108.  

109.        }  

110.  

111.    }  

112.}

  MVC中代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using Myself.Models;

using Myself.Code;

using BLL;

using Lib;

using SpeexToWavToMp3;

using System.Web.Http.Filters;

using Models;

using Webdiyer.WebControls.Mvc;

using System.IO;

namespace Myself.Controllers

{

    public class MySelfController : Controller

    {

         public ActionResult LoginSina()

        {

            var oauth = new NetDimension.Weibo.OAuth(appKey,appSecret,Url.Action("LoginSinaResult", "MySelf", null, "http"));

            //第一步获取新浪授权页面的地址

            var oauthUrl = oauth.GetAuthorizeURL();

            return Redirect(oauthUrl);

        }

        public ActionResult LoginSinaResult(string code)

        {

            var oauth = new NetDimension.Weibo.OAuth(appKey, appSecret, Url.Action("LoginSinaResult", "MySelf", null, "http"));

            var oauthToken = oauth.GetAccessTokenByAuthorizationCode(code);

            var model = UserHelper.GetAuthorizeInfo(oauthToken.UID, 1);

            if (model != null)

            {

                if (LoginHelper.UserLogin(model.UserID, 1, oauthToken.UID, Request.UserAgent, Request.UserHostAddress, "1", "web"))

                {

                    return RedirectToAction("Index", "Home");

                }

                else

                {

                    return Content("登录失败");

                }

            }

            return Content("您尚未注册");

        }      

    }

}

  

如果要运行上述程序的话,需要把Appkey和Appsecret给替换掉。

2、授权页面

下面的是提示微博登陆的界面,登陆后提供第三方网站授权访问你在新浪微博账号上的资源

3、授权访问页面

4、新浪官方网站提供API测试工具,用来测试客户端构造的参数是否正确

5、Oauth2.0运行流程图

第一步:首先直接跳转至用户授权地址,即图示 Request User Url ,提示用户进行登录,并给予相关资源授权,得到唯一的Auth code,这里注意的是code只有10分钟的有效期,对于安全考虑,相对于OAuth1.0省了一步获取临时的Token,并且有效期也进行了控制,比1.0认证简化了很多,并安全一些; 第二步:得到授权code后,这一步就是请求access token,通过 图示 Request access url ,生成得到数据Token; 第三步:通过Access Token请求OpenID,openid是用户在此平台的唯一标识,通过 图示 Request info url 请求,然后得到OpenID; 第四步:通过第二步得到的数据Token、第三步得到的OpenID及相关API,进行请求,获取用户授权资源信息

时间: 2024-10-07 15:17:24

Oauth2认证以及新浪微博开放平台应用的相关文章

使用新浪微博开放平台请求授权登录(获取接口及创建应用过程)

1.登录新浪微博开放平台,点击最上面的文档找到微博API,OAuth授权接口: 2.点击请求授权,获取URL及参数,此时我们还没有创建应用 . 3.创建应用,之后输入自己微博密码,按步骤给应用起名字等等,这里忽略. 4.创建完成之后,点击应用,基本信息里有AppKey及AppModel Secret(这个以后会用) 高级信息设置回调页(随便输入一个网址即可) 测试信息(将测试账号添加) , 5.在浏览器里输入(用苹果自带的浏览器,不要用谷歌) https://api.weibo.com/oaut

iOS5.0以上使用新浪微博开放平台OAuth 续(及解决登录无效问题)

新浪微博开放平台为第三方应用提供了简便的合作模式,满足了手机用户和平板电脑用户随时随地分享信息的需求.通过调用平台的api即可实现很多微博上的功能. 本篇主要目的是记录新浪微博移动SDK iOS版本的在iOS5下的嵌入和使用. 1.申请一个新浪微博的移动应用 . 申请地址:http://open.weibo.com/development,申请后得到App key 和 App Secret 2.下载iOS_sdk 下载地址:http://open.weibo.com/wiki/SDK#iOS_S

新浪微博开放平台深度历险

作者:蒋宇捷(hfahe) 版权声明:原创作品,欢迎转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明. 10月21日补充 解决Ajax跨域的方法 可通过新浪提供的JS SDK解决,详情參考http://open.t.sina.com.cn/wiki/index.php/JS-SDK,须要在server嵌入xd.html文件. 简单介绍 新浪微博开放平台的体系參考了Twitter,两者很相似,包含接口.參数的定义,请求方式等等,假设熟悉Twitter的API,基本能够相同的适用到

新浪微博开放平台API

关于新浪微博开放平台有很多问题,网上文档写的不是很清楚,授权机制把我给难住了 不清楚怎么回事一直报没有权限 EMAIL给开发人员也没回应 偶然尝试到一个方法  States返回了成功 如下代码: 1.在head 引用 <meta property="wb:webmaster" content="8998f19501c5a01c" /> <script src=" http://tjs.sjs.sinajs.cn/open/api/js/w

PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用基础

1.新浪微博开放平台(http://open.weibo.com/wiki/index.php/Quickstart)        开放的是什么:开放平台开放给开发者的是每一个用户的用户关系,开发者不在向传统应用那样面对单个开发者而是面对用户身后的整个好友圈.每一个API都是围绕好友与好友之间的交流来提供相关的功能,如发送微博,查看好友资料等等.        为什么要使用开放平台?开放平台可以加快应用的推广.每个用户可以影响到周围的好友,一旦应用真的优秀,用户可以方便的推荐给好友,好友又可以

IOS基于新浪微博开放平台微博APP

1.基于新浪微博开放平台APP源代码 2.gitHub源码下载地址 https://github.com/whzhaochao/SinaWeiBoOpen/blob/master/readme.md

apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析

一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如发微博.关注等,都是需要获取用户身份认证的. 目前微博开放平台用户身份鉴权主要采用的是OAuth2.0. 另外,为了方便开发者开发.测试自己的应用,我们还提供了Basic Auth的身份鉴权方式,但Basic Auth仅适用于应用所属的开发者自己调用接口. OAuth2.0概述 OAuth2.0较1

裴东辉-如何使用新浪微博API开放平台进行程序开发http://www.cnblogs.com/dhsunny/p/3578399.html?utm_source=tuicool&amp;utm_medium=referral

前段时候抓取微博的数据,想着自己使用htmlunit来模拟登陆新浪微博来抓取数据,这两天看了新浪微博的官方API,发现通过新浪微博的官方API 来获取新浪微博信息,更全面,更简单.下面就从注册新浪微博,到在新浪微博开放平台上面完善开发者信息,然后创建应用,从而获取Access Token,最后开发自己的应用程序. 1注册126邮箱 02注册新浪微博 03登陆新浪微博 04登陆新浪开放平台 05查看微博API 06可以看到有获取用户关注的用户信息列表 07打开api测试工具 08创建应用获取Acc

集成第三方开放平台

目前国内常见的第三方开放平台有: QQ开放平台 微信开放平台 新浪微博开放平台 我们可以通过集成这些第三方平台来实现: 第三方登录 内容分享到第三方平台 获取第三方平台用户资源 ...... 下面以新浪微博开放平台为例看下Java系统具体的集成步骤,QQ和微信类似,只需少许修改(具体请参考源码中示例)   一.注册平台账号,创建应用,填写认证回调地址(例如:http://127.0.0.1:8080/weibo/callback) 二.通过OAuth2认证 1.重定向请求,请求授权码code /