网站调用新浪微博内容(OAuth2.0协议授权流程查看/access_token获取)

优采云 发布时间: 2021-11-08 17:12

  网站调用新浪微博内容(OAuth2.0协议授权流程查看/access_token获取)

  一、OAuth2.0概览

  大多数 API 访问,例如发布微博、获取私人消息和关注,都需要用户身份。目前新浪微博开放平台用户身份认证包括OAuth2.0和Basic Auth(仅用于应用开发Debugging接口),新版接口也仅支持这两种方式。 OAuth2.0比1.0的整个授权验证过程更简单、更安全,也是未来最重要的用户认证和授权方式。 OAuth2.0协议授权流程见OAuth2.0授权流程,其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,Resource Server是API 服务器。

  参考链接:以及新浪微博开放平台和新浪微博CodeProject开源项目

  开发者可以先浏览OAuth2.0的接口文档,熟悉OAuth2接口和参数的含义,然后根据应用讲解如何使用OAuth2.0场景。

  OAuth2 接口文档

  接口说明

  OAuth2/授权

  请求用户授权令牌

  OAuth2/access_token

  获取授权访问令牌

  OAuth2/get_token_info

  授权信息查询界面

  OAuth2/revokeoauth2

  授权恢复接口

  OAuth2/get_oauth2_token

  OAuth1.0的Access Token替换为OAuth2.0的Access Token

  二、OAuth2.0 新浪授权页面

  1、 首先获取a*敏*感*词*ey和appSecret。这种获取方式可以在新浪微博新手指南中一步步获取。这里的回调地址使用默认的:网站访问方式。以下是 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 a*敏*感*词*ey = "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(a*敏*感*词*ey,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(

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 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(() =>

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(a*敏*感*词*ey,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(a*敏*感*词*ey, 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("您尚未注册");

}

}

}

  要运行上述程序,需要替换A*敏*感*词*ey和Appsecret。

  2、授权页面

  以下是微博登录的界面,登录后第三方网站授权访问您新浪微博上的资源

  将提供。

  

  3、授权访问页面

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

  

  5、Oauth2.0 操作流程图

  

  第一步:首先直接跳转到用户授权地址,即图标Request User Url,提示用户登录,授权相关资源获取唯一Auth code。这里注意代码的有效期只有10分钟出于安全考虑,相比OAuth1.0,它节省了一步获取临时token的时间,而且有效期也有控制,比1.0简单多了,安全多了@1.0 认证;第二步:获取代码授权后,这一步是请求访问令牌,使用图标请求访问url生成数据令牌;第三步:通过Access Token请求一个OpenID,即用户在本平台的唯一标识,通过图标Request info url请求,然后得到OpenID;第四步:利用第二步获取的数据Token、第三步获取的OpenID及相关API请求获取用户授权资源信息

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线