[ASP.net教程] 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
来源:互联网 发布:佳能软件dpp 4.0 编辑:程序博客网 时间:2024/05/01 14:59
ios 借鉴下:
本文的环境仅仅是针对最新的新浪oauth2.0, 早期的1.0方式我不太了解,也不在本文的范畴内。
解决方案给出两种: 1,描述解决思路,各位自己去实现。 2,给出我开发好的asp.net 4.0 dll,直接傻瓜化加载使用。
当时,我把电脑屏幕翻转了180度,想看看新浪的文档里面是不是有些什么隐藏说明(因为有先例:九阳真经就是这么来的),要不然为什么我已经正确提交了各个POST参数,依然得到: '{"error":"invalid_request","error_code":21323,"request":"/2/oauth2/access_token","error_uri":"/2/oauth2/access_token","error_description":"miss client id or secret"}' 这样的错误提示。
一切都已经按照文档的说来做了,参见:http://open.weibo.com/wiki/OAuth2/access_token。 我自视水平不高,虽然是个初学者,但是这样的配置还是能够搞定的,可结果偏偏还是错误。
我也不想再列举自己的各种证据了,需要搭建的环境太麻烦,没那功夫,反正遇到这问题的人多的是,搜一搜别人的例子就知道,都是一样的遭遇。
我始终认为是我的错误,而不是新浪的错误,所以,电脑屏幕翻转了180度,没发现什么特别的隐藏说明,接着又拿一块大镜子来看镜像,还是没发现什么,最后使出了绝招: 把文档的所有文字按照奇数和偶数都排列着读一遍,依旧无解。 终于: 我开始觉得不是我的错了,而是新浪的错。
文档中有这么一句提示:
HTTP请求方式:POST
这句话太简单了,你们想要人家POST什么?让人认为所有的参数都要作为POST发送过去。可事实偏偏不是这样的, OAuth的服务端只要看到本次提交的行为是POST就行, 至于POST集合里面有没有数据,有些什么数据,它才不会管,所以,无论我们在POST里面添加了什么键|值、无论怎么切换顺序,都是错误的,因为它就没有去读取。
解决办法只有本着死马当活马医的态度: 乱搞!
最终还是让我发现了----需要使用GET和POST的混合方式来提交:
提交的地址应该是:"https://api.weibo.com/oauth2/access_token?client_id={0}&client_secret={1}&grant_type=authorization_code&code={2}&redirect_uri={3}"
请求方式:POST
POST中的数据:空!
0,1,2,3 对应你自己的参数值
就是这样,终于正确获得token值,服务器只管你的method是POST就行了,你的实际参数都是在GET里面的。
顺便提一下: 如果采用basic方式在http头中添加key和secret, 最后依然是大同小异的错误,只不过是提示变成了找不到你的redirect_uri参数。
好了,解决思路说完了。如果你不愿自己动手,并且你也和我一样是ASP.NET 4.0开发的话,可以接着往下看:
下载地址:http://files.cnblogs.com/kvspas/SinaOAuth_20111230_v1.zip
组件中已经封装好了直接获取用户基本信息的功能,并且已经强类型化。
组件的一部分功能使用了JSON.NET库(http://json.codeplex.com/)
使用办法:
首先,必须保证运行环境是4.0,因为解析JSON的方式涉及到dynamic类型
1: 页面1
//第一步,将用户引导到新浪微博登陆地址
var login = new SinaOAuthLogin("你的key", "你的回调地址");
Response.Redirect(login.SinaOAuthLoginUri);
2:页面2
using SinaOAuth;//第二步,这个页面来自新浪跳转过来,也就是上一步中你设置的回调地址
//本页面的url格式应该是这样的:
//http://www.abc.com/sinaoauth.aspx?code=427bbf62b4b91339951b436c4880e9ef
var code = Request.QueryString["code"];
SinaOAuthApi s = new SinaOAuthApi("你的key", "你的secret", "你的回调地址");
var tokenValue = s.RequestTokenData(code); //包含了uid、expires_in、access_token,请求其它API时候使用
var user = s.RequestUserInfo; //获取用户基本信息
Response.Write(user.name);
好了,就这么简单。 最核心的身份验证部分已经帮你通过了,其它的API就由你自由发挥了。
使用其它语言的朋友请参照解决思路自行编码。
这是新浪API团队设计思维上的一个BUG,之所以说是“设计思维”上,是因为没有对生产环境的运行带来坏处,但是这样的文档说明存在二义性、POST不是POST,GET不是GET的机制,难以专业化, 这个系统还有很大的改善空间。
- [ASP.net教程] 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
- 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
- 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
- 新浪OAuth客户端登陆另辟蹊径
- 新浪微博python下api的OAuth登陆
- 新浪微博python下api的OAuth登陆
- Asp.net网站部署时遇到的一些问题
- Asp.net网站部署时遇到的一些问题
- 新浪微博 oAuth 解决方案
- .NET根据oauth授权机制获得新浪微博的coder然后模拟Post请求获得AccessToken
- ASP连接SQL2000数据库,用户'/ASPNET'无法登陆的解决方案
- OAuth client 微信、qq、新浪登录
- 部署一个安全的ASP.NET MVC 5应用程序成员、OAuth和SQL Azure网站数据库
- asp.net网站和php的discuz单向同步登陆
- Asp.net WEBAPI 简单的OAUTH认证
- 用asp.net连接数据库的登陆代码
- asp.net 网站安全解决方案
- ASP.NET发布网站解决方案
- CentOS 安装多种解码器打造Linux的全能播放器
- 清明節をしのぶ作者トマト文
- Eclipse设置:背景与字体大小和xml文件中字体大小调整
- Linux(FC)下播放rm rmvb mp3 wma 等各种媒体文件的解决方法
- mysql数据文件的导入导出
- [ASP.net教程] 新浪OAuth网站登陆连接,请求access_token时遇到21323 miss client id or secret 的解决方案
- 大二暑期学习计划
- activity横竖屏获取以及判断
- Java学习笔记——多线程编程
- Android 游戏引擎AndEngine(加载场景)
- Linux下tar.xz结尾的文件的解压方法
- 回调函数与注册函数
- PHP中$_SERVER详解
- PHP原理之Opcodes