急求豆瓣音乐oauth认证包 豆瓣音乐提供的o...

trackbacks-0
豆瓣api通过OAuth允许第三方应用访问用户数据,所以OAuth认证就是我们整个project的基础了。
OAuth认证听起来挺神秘,其实挺简单的。
现在的大型网站的开放平台的认证几乎都是采用OAuth,比如facebook,twitter,新浪微博等。
豆瓣的api有对于OAuth认证的专门说明:
在你使用OAuth认证之前,先仔细读一读文档非常有必要,因为中间过程出现一点偏差,你就不能被认证成功,所以仔细阅读官方文档是重中之重:
如果你的英文不够给力的话,可以看看这篇中文的介绍,说的很清楚:
google OAuth项目已经提供了OAuth的各种语言的库:
我们正式使用了google OAuth中的C#库:
因为OAuth已经成为了第三方开发者使用豆瓣api的一大障碍,豆瓣曾经专门举办了一次活动来讲解如何通过OAuth使用豆瓣api:
这次活动的源码在google code上可以找到:,我们正式参考了这个文件,对我们的帮助很大,省去了很多摸索的时间
作为命令行程序我们已经测试成功了,但是当移植到windows phone上之后就出现了问题
问题的关键在于silverlight版的网络方面的api和C#的不同,silverlight的api更少,这就导致了上面的库的一些网络访问要自己改写
仔细阅读httpwebrequest的文档后,我们发现,要进行一个网络请求,至少要三个函数,因为需要使用两次异步请求(, )
因为我们的豆瓣app几乎每个动作都要对豆瓣服务器进行请求,如果每个请求都需要写三个函数,并且还要增加认证信息的话,实在是太麻烦,代码会变得又臭又长
这时候DRY(don&t repeat yourself)就显得尤为重要了
作为pm,我决定把网络访问这一块封装好,给大家提供统一的,简单好用的借口。
我本准备自己把那两个异步请求封装起来,后来发现已经有现成的库可用,而且很好很强大。
这个库就是restsharp:
而且restsharp还提供了windows phone对应的dll,很是方便,原来的三个函数现在只需要一个函数几行就可以搞定
对于很多请求,豆瓣都要求有认证才可以访问,根据豆瓣的文档&进行POST、PUT、DELETE请求时,豆瓣暂时不支持使用在url中或者post form中传递OAuth参数。因此你只能选择在header中传递OAuth参数&,看来我们只能把oauth加到http header中了。
我部分我统一封装了一下:namespace AddOAuthHeader{&&& public class OAuthHeader{&&&&&&& string apiKey = "your api key";&&&&&&& string apiKeySecret = "your api key secret";&&&&&&& string accessT&&&&&&& string accessTokenS&&&&&&&&&&&&&&&&&&&&& OAuthBase oAuth = new OAuthBase();&&&&&&& IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationS
&&&&&&& public OAuthHeader(string uri, string method) {&&&&&&&&&&& this.uri =&&&&&&&&&&& this.method =&&&&&&& }
&&&&&&& public string getHeader(){&&&&&&&&&&& string nonce = oAuth.GenerateNonce();&&&&&&&&&&& string timeStamp = oAuth.GenerateTimeStamp();&&&&&&&&&&& string normalizeUrl, normalizedRequestP
&&&&&&&&&&& //accessToken = settings["accessToken"].ToString();&&&&&&&&&&& //accessTokenSecret = settings["accessTokenSecret"].ToString();
&&&&&&&&&&& accessToken = "ee7ead643e6ea1a1cb7c082cbb4be4e3";&&&&&&&&&&& accessTokenSecret = "dcc9b";
&&&&&&&&&&& string sig = oAuth.GenerateSignature(&&&&&&&&&&&&&&& new Uri(uri),&&&&&&&&&&&&&&& apiKey,&&&&&&&&&&&&&&& apiKeySecret,&&&&&&&&&&&&&&& accessToken,&&&&&&&&&&&&&&& accessTokenSecret,&&&&&&&&&&&&&&& method,&&&&&&&&&&&&&&& timeStamp,&&&&&&&&&&&&&&& nonce,&&&&&&&&&&&&&&& OAuthBase.SignatureTypes.HMACSHA1,&&&&&&&&&&&&&&& out normalizeUrl,&&&&&&&&&&&&&&& out normalizedRequestParameters);&&&&&&&&&&& sig = HttpUtility.UrlEncode(sig);
&&&&&&&&&&& StringBuilder oauthHeader = new StringBuilder();&&&&&&&&&&& oauthHeader.AppendFormat("OAuth realm=\"\", oauth_consumer_key={0}, ", apiKey);&&&&&&&&&&& oauthHeader.AppendFormat("oauth_nonce={0}, ", nonce);&&&&&&&&&&& oauthHeader.AppendFormat("oauth_timestamp={0}, ", timeStamp);&&&&&&&&&&& oauthHeader.AppendFormat("oauth_signature_method={0}, ", "HMAC-SHA1");&&&&&&&&&&& oauthHeader.AppendFormat("oauth_version={0}, ", "1.0");&&&&&&&&&&& oauthHeader.AppendFormat("oauth_signature={0}, ", sig);&&&&&&&&&&& oauthHeader.AppendFormat("oauth_token={0}", accessToken);
&&&&&&&&&&& return oauthHeader.ToString();&&&&&&& }&&& }}
传入一个url和一个方法(post or put or delete or get),我就给他返回一个oauth header,其他同学直接调用我的代码就好了,并不需要关心认证问题
那具体该如何来进行一个网络请求呢?
我写了两个例子,一个post的,一个get的。
向豆瓣传数据,post:(我把说明都写到了注释中)
// "POST" 实例,以发一条状态为例private void button1_Click(object sender, RoutedEventArgs e){&&& //首先都要先实例化一个OAuthHeader,传入的参数为url和网络请求的方法(post or get or delete or put or something else)&&& OAuthHeader header = new OAuthHeader(", "POST");
&&& //对于post,要传给服务器一些数据,豆瓣api用xml来传数据,就需要先build一个xml的string&&& StringBuilder requestBody = new StringBuilder("&?xml version='1.0' encoding='UTF-8'?&");&&& requestBody.Append("&entry xmlns:ns0=\" xmlns:db=\"&");&&& requestBody.Append("&content&hello world&/content&");&&& requestBody.Append("&/entry&");
&&& //下面两行是每一个网络请求都需要的,即与建立一个连接&&& var client = new RestClient();&&& client.BaseUrl = "
&&& //下面这行的意思是产生一个请求,第一个参数是路径名(不是完整的url),后面是Method.POST 或 Method.GET 或Method.PUT 或 Method.DELETE&&& var request = new RestRequest("/miniblog/saying", Method.POST);
&&& //下面进行一些http头的设置
&&& //先设置request的format为xml&&& request.RequestFormat = DataFormat.X&&& request.AddHeader("Content-Type", "application/atom+xml");
&&& //然后是把生成的authorization写入http的header&&& request.AddHeader("Authorization", header.getHeader());
&&& //最终把要上传的数据写入http请求中,注意要加上ParameterType.RequestBody&&& request.AddParameter("application/atom+xml", requestBody.ToString(), ParameterType.RequestBody);
&&& //最后就是进行异步网络请求了,并且将传回的response的信息解析出来,呈现在页面上&&& client.ExecuteAsync(request, (response) =&&&& {&&&&&&& var resource = response.C&&&&&&& Debug.WriteLine(resource);&&& });}
//GET实例,以获取好友列表为例,get比较简单,不需要传入数据private void button3_Click(object sender, RoutedEventArgs e){&&& //同上&&& OAuthHeader header = new OAuthHeader(", "GET");
&&& var client = new RestClient();&&& client.BaseUrl = "
&&& //注意,这里生成request的时候,不要把?后面的parameter加上,parameter要在后面的request.AddParameter处实现&&& var request = new RestRequest("/people//contacts", Method.GET);
&&& //加上认证头&&& request.AddHeader("Authorization", header.getHeader());
&&& //加上参数&&& request.AddParameter("start-index", "1");&&& request.AddParameter("max-results", "50");
&&& client.ExecuteAsync(request, (response) =&&&& {&&&&&&& var resource = response.C&&&&&&& Debug.WriteLine(resource);&&&&&&& textBlock1.Text =&&& });}
这样就可以大大简化网络请求,真正做到了don&t repeat yourself
阅读(...) 评论()[转载]在.NET中实现OAuth身份认证 – 白袍秀士 – 博客园
为 开放API的授权提供了一个安全且开放的标准,它的第一个版本发布于2007年,OAuth 2.0协议版本还在处于草稿状态。到现在为止,大多数开放API的互联都采用OAuth方式来进行授权,如前一段时间Twitter取消HTTP Basic认证方式而采用OAuth,国内的应该是使用OAuth的先 行者,而新浪微博开放平台同时支持HTTP Basic和OAuth两种方式。使用OAuth最大的好处在于第三方应用无需知道用户的账号信息(如用户名与密码)就可以申请获得该用户资源的授权。本 文首先我会简单介绍一下HTTP Basic认证方式,而后面详细介绍在.NET中如何使用OAuth方式进行认证。
HTTP Basic认证如果采用HTTP Basic认证方式,一般的做法是在HTTP请求头中添加Authorization标头,把用户名和密码装换为Base64编码放在HTTP请求头中,用.NET非常简单的就可以实现,如下代码所示:
string url = “http://terrylee.me/blog”;
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebR
string username = “myusername”;
string password = “mypassword”;
string up = username + “:” +
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(url), “Basic”, new NetworkCredential(username, password));
request.Credentials =
request.Headers.Add(“Authorization”, “Basic ” + Convert.ToBase64String(new ASCIIEncoding().GetBytes(up)));
HttpWebResponse response = request.GetResponse() as HttpWebR
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());在发起请求后,可以看到HTTP头中的Authorization标头:
关于HTTP Basic认证的详细内容大家可以参考。可以看到使用HTTP Basic认证的缺点在于第三方应用需要知道用户账号信息,存在着很多的不安全因素。
OAuth认证在使用OAuth认证时,有3个常用的URL需要首先了解一下:
A. 获取未授权的Request Token B. 请求用户对Request Token授权 C. 使用授权Request Token换取Access Token整个认证过程可以分为3步,我们用下面的流程图来表示:
接下来我们以豆瓣的OAuth认证为例,具体看一下每一步需要做什么。首先可以在下载到各种语言实现OAuth类库,因为我们的示例用来实现(完整的示例代码在能够下载到),所以只用下载到的OAuthBase类就够了,另外在开始之前还需要到豆瓣去创建一个应用,以便能够拿到api_key和api_Secret。
第一步,获取未授权的Request Token,请求的地址为,在这一步里的请求参数oauth_consumer_key就是我们在上面创建应用时得到的api_key,而计算签名使用的Secret也就是上面创建应用时得到的api_secret:
//1. 获取Request Token,该步骤使用API Key和API Key Secret签名
public void getRequestToken()
Uri uri = requestTokenU
string nonce = oAuth.GenerateNonce();
string timeStamp = oAuth.GenerateTimeStamp();
string normalizeUrl, normalizedRequestP
string sig = oAuth.GenerateSignature(
apiKeySecret,
string.Empty,
string.Empty,
“GET”,
timeStamp,
OAuthBase.SignatureTypes.HMACSHA1,
out normalizeUrl,
out normalizedRequestParameters);
sig = HttpUtility.UrlEncode(sig);
//构造请求Request Token的url
StringBuilder sb = new StringBuilder(uri.ToString());
sb.AppendFormat(“?oauth_consumer_key={0}&”, apiKey);
sb.AppendFormat(“oauth_nonce={0}&”, nonce);
sb.AppendFormat(“oauth_timestamp={0}&”, timeStamp);
sb.AppendFormat(“oauth_signature_method={0}&”, “HMAC-SHA1″);
sb.AppendFormat(“oauth_version={0}&”, &#”);
sb.AppendFormat(“oauth_signature={0}”, sig);
Console.WriteLine(“请求Request Token的url: \n” + sb.ToString());
//请求Request Token
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString());
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
string responseBody = stream.ReadToEnd();
stream.Close();
response.Close();
Console.WriteLine(“请求Request Token的返回值: \n” + responseBody);
//解析返回的Request Token和Request Token Secret
Dictionary&string, string& responseValues = parseResponse(responseBody);
requestToken = responseValues[“oauth_token”];
requestTokenSecret = responseValues[“oauth_token_secret”];
}通过这一步我们可以得到Request Token和Request Token Secret。
第 二步,请求用户对Request Token授权,跳转到服务提供方授权页面(本例中指豆瓣/service/auth /authorize),在跳转到授权页面时需要传递第一步获取的Request Token。另外,在请求授权页面时还有一个可选参数oauth_callback,指用户授权完全后跳转回的页面,对于Web应用来说,这一步不是什么 问题,使用浏览器进行跳转就可以了。但是如果第三方应用是客户端程序,就显的有些麻烦,新浪微博API使用的解决方案是如果第三方应用是客户端应用,则在 用户授权完成后,生成一个PIN码,第三方应用会要求用户输入这个PIN码。
// 2. 用户确认授权
public void authorization()
//生成引导用户授权的url
string url =
authorizationUri + requestT
Console.WriteLine(“请将下面url粘贴到浏览器中,并同意授权,同意后按任意键继续:”);
Console.WriteLine(url);
}第三步,使用授权的Request Token换取Access Token,请求的地址为,这一步的请求过程与第一步大同小异,唯一不同的地方在于计算签名时需要同时使用创建应用时获取的api_secret和第一步获取的Request Token Secret,在请求的结果中将会包含Access Token和Access Token Secret。
// 3. 换取Access Token,该步骤使用API Key、API Key Secret、Request Token和Request Token Secret签名
public void getAccessToken()
Uri uri = accessTokenU
string nonce = oAuth.GenerateNonce();
string timeStamp = oAuth.GenerateTimeStamp();
string normalizeUrl, normalizedRequestP
string sig = oAuth.GenerateSignature(
apiKeySecret,
requestToken,
requestTokenSecret,
“GET”,
timeStamp,
OAuthBase.SignatureTypes.HMACSHA1,
out normalizeUrl,
out normalizedRequestParameters);
sig = HttpUtility.UrlEncode(sig);
//构造请求Access Token的url
StringBuilder sb = new StringBuilder(uri.ToString());
sb.AppendFormat(“?oauth_consumer_key={0}&”, apiKey);
sb.AppendFormat(“oauth_nonce={0}&”, nonce);
sb.AppendFormat(“oauth_timestamp={0}&”, timeStamp);
sb.AppendFormat(“oauth_signature_method={0}&”, “HMAC-SHA1″);
sb.AppendFormat(“oauth_version={0}&”, &#”);
sb.AppendFormat(“oauth_signature={0}&”, sig);
sb.AppendFormat(“oauth_token={0}&”, requestToken);
Console.WriteLine(“请求Access Token的url: \n” + sb.ToString());
//请求Access Token
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sb.ToString());
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
string responseBody = stream.ReadToEnd();
stream.Close();
response.Close();
Console.WriteLine(“请求Access Token的返回值: \n” + responseBody);
//解析返回的Request Token和Request Token Secret
Dictionary&string, string& responseValues = parseResponse(responseBody);
accessToken = responseValues[“oauth_token”];
accessTokenSecret = responseValues[“oauth_token_secret”];
}到 这一步为止,整个认证过程就已经完成了。现在有了Access Token和Access Token Secret,就可以访问受限资源了,在计算签名时需要使用创建应用时得到的api_secret和这一步得到的Access Token Secret,OAuth认证信息推荐添加在HTTP请求标头中,如使用豆瓣API发送广播:
POST /miniblog/saying HTTP/1.1
Authorization: OAuth realm=””,
oauth_consumer_key=0c7c3ca26a68d2adf3a7807,
oauth_nonce=8559837,
oauth_timestamp=,
oauth_signature_method=HMAC-SHA1,
oauth_version=1.0,
oauth_signature=HmkcQjhd6B3pZ%2fRWkJ23VAxlHKQ%3d,
oauth_token=136c07ebc88d53ec3afbc4
Content-Type: application/atom+xml
Content-Length: 172
&?xml version=&#′ encoding=’UTF-8’?&
&entry xmlns:ns0=”http://www.w3.org/2005/Atom” xmlns:db=”/xmlns/”&
&content& OAuth认证成功&/content&
&/entry&OAuth的认证过程虽然相比较HTTP Basic稍显有些复杂,但只要弄清楚了整个过程,还是比较简单的,总结起来就是获取Request Token,请求用户授权,换取Access Token三个步骤。
参考资料:
1. OAuth官方:
2. OAuth规范中文描述:
3. 豆瓣OAuth认证示例:
4. 豆瓣API OAuth认证:
本文的评论功能被关闭了.
备案信息:下次自动登录
现在的位置:
& 综合 & 正文
从实现iPhone的OAuth封装看国内互联网和开放平台(转)
http://blog.csdn.net/arthurchenjs/article/details/6567563
由于工作需要,我最近接触了现在开放平台基本都会使用的OAuth协议。我相信OAuth是很强大的,但是,终于我还是切身的领教了中国互联网的的强大之处。
我的目的是制作一个iphone平台比较通用的OAuth库封装,通过简单的配置URL和key等参数,就可以快速的支持其开放平台,包括界面也是由我来完成。原先以为都是有开源封库的,只要简单的在做一层wrapper,开放几个接口应该就可以了。可惜的是想法是美好的,现实是残酷,道路也肯定是曲折的。
我看到的OAuth
说实话,我没有比较好的研究过OAuth这个协议,大致上来说,OAuth协议的目的是让第三方在不接触到用户的账号和密码情况下可以访问第一方的资源。这想起来真是太强大了。
OAUTH认证授权就三个步骤,三句话可以概括:
1.获取未授权的Request Token
2.获取用户授权的Request Token
3.用授权的Request Token换取Access Token
  当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家肯能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。
很幸运,网络上开源项目有Objective-C版本的,我好不客气的checkout了,没有很深入的研究内部的,不过看到代码主要还是对数据结构的封装,对URLRequest的封装,还有一些加密的处理。小做修改,就可以将其中桌面版的移植到手机版本的。不过我马上发现新浪的代码也是使用OAuthConsumer这份代码。我毫不犹豫的投入到新浪的怀抱中。
l新浪的判断机制
新浪微博被认为是行业翘楚,其代码和api应该不会差到哪。例子的跑的挺好,可是后来看到其中一段代码和注释,我真的凌乱了。
/*********************************************************************************************************
I am fully aware that this code is chock full 'o flunk. That said:
- first we check, using standard DOM-diving, for the pin, looking at both the old and new tags for it.
- if not found, we try a regex for it. This did not work for me (though it did work in test web pages).
- if STILL not found, we iterate the entire HTML and look for an all-numeric 'word', 7 characters in length
Ugly. I apologize for its inelegance. Bleah.
*********************************************************************************************************/
- (NSString *) locateAuthPinInWebView: (UIWebView *) webView {
NSString *
*html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"];
NSLog(@"html:%@", [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]);
if (html.length == 0) return nil;
const char
*rawHTML = (const char *) [html UTF8String];
length = strlen(rawHTML), chunkLength = 0;
for (int i = 0; i & i++) {
if (rawHTML[i] & '0' || rawHTML[i] & '9') {
if (chunkLength == 6) {
*buffer = (char *) malloc(chunkLength + 1);
memmove(buffer, &rawHTML[i - chunkLength], chunkLength);
buffer[chunkLength] = 0;
pin = [NSString stringWithUTF8String: buffer];
free(buffer);
chunkLength = 0;
chunkLength++;
return nil;
这段代码我也没细品,但是基本可以看出是在网页的html代码中找到一串数字,找到了就认为是授权pin码,我的天啊,算了,人家也道歉了。可是我真不知道怎么来做这个协议了。
后来才发现,其实只要取到verifier就可以了,这是直接在url里面就有,不用去html里面扣。
l新浪支持的XAuth协议
什么是XAuth呢? 我没有去考据究竟XAuth是谁的创造, 它几乎搬了大部分OAuth的内容, 不过解决了一个什么问题呢? 解决了一个 "OAuth认证必须跳转到第一方去输入密码" 的问题(美其名曰提升用户体验)。我真不知道说什么了, 第三方是可以得到用户密码的, 那它是不是直接把OAuth的第一大feature给咔嚓掉了——那basic auth不能满足你么?
lOAuth提供两种认证方式
在新浪的文档中,我还注意到了这一段话:OAuth提供两种认证方式:query-string和http headers。我们推荐使用http header进行认证。
也许是这段话,腾讯微博做出了选择,让我悲剧了好长一段时间,终于向企鹅大哥妥协了。
很快,调通了新浪微博后,我就开始腾讯的历程了。可是怎么都是不能授权成功,第一步获取token就失败了。后来我在FAQ中找到一段话:
请带上所有OAuth需要的参数,并按照规范传输(暂不支持Header方式传参,请通过GET,POST方式),腾讯微博授权协议在OAuth 【RFC 5849】 标准基础上开发。第一步需带上回调URL(oauth_callback参数),不是在第二步(非同于基他微博OAuth授权)。回调url需根据[RFC3986] 所定义的百分号机制进行URL转义。
我真的怀疑腾讯为了和新浪不兼容才不支持header方式传参的。就因为这一条,我最后还是选择了腾讯的封装,而弃用了新浪的封装。
另一个问题是:在请求request_token时传递oauth_callback参数, 因为写测试没用到callback, 所以肯定库会帮我填上oob(out-of-bound), 不过让我很崩溃的是, 给我跳转到了一个这样一个地方:
结果是NOT FOUND了。
然后我又看到了下一条说明:
桌面应用,手机应用,因为没有callback_url(oauth_callback参数),所以在第一步传CALLBACK时请用oauth_callback=null代替,不然得不到 PIN码。“null”串不区分大小写。
还有腾讯的不同之处还有是拦截url中的oauth_verifier=xxxxxx的部分来继续操作。相比新浪的,也是靠谱一点,可是也就是因为这个,后面豆瓣和网易我都没能都支持。
搜狐微博的支持似乎比较弱,但是中规中规中矩的,除了界面比较丑陋,没有针对手机适配,其他的很容易就走通了流程了。
开始我尝试了网易微博的授权,没能成功。
首先我发现的明显的一个不按照标准的地方是authorization步骤, 它提供了两个接口, 一个是/oauth/authorize, 一个是/oauth/authenticate, 首先我先申明这两个单词我一直搞不清, 不过在网易给OAuth的分工中, 它们的工程师是这么定义的: authorize不处理callback, 直接展示verifier的页面; 另一个, authenticate则处理callback. (至于给第二个传oob会怎么样, 有没有返回oauth_callback_confirmed, 我都没有细看了)。
另外小提一下, 它在回调你的callback地址的时候, 传的参数名是oauth_token, 不过相信我, 我觉得那是oauth_verifier。
后来仔细研究了网易的协议后,我才发现,其实并不是每一个都需要verifier。那怎么来确定是否同意授权,只要重定向了,就可以认为用户已经授权,直接去换取accesstoeken就可以了。因为这样豆瓣的问题也同样的解决了。
还有,网易需要把重定向url加到在请求授权url时一起加上,他才不管你在header里已经传了。
最后还需要加上client_type=mobile,真是麻烦。
还有,网易的demo代码真是不知道说什么了。不过算了,毕竟人家也是贡献出来的。整个网易的objective-C代码就是把腾讯的demo改改,然后就拿出来了。不过出现了和我一样的问题,但是可能不知道重定向url的问题,出现了手动输入pin的界面,这是我做库所不能接受的,所以没有采纳。
开始豆瓣我也没有能够成功,他总是不会重定向到我的URL,转而跳转到其授权的界面。这大概是我使用腾讯封装导致的结果。可是我还真没好好的确认这个流程了。
后来才发现,只要在请求网页地址的时候,需要吧重定向地址加到url,这样才会正确重定向,并且和网易一样,没有verifier,直接请求就可以成功了。
豆瓣没有Objective-C的代码,没有参考,很久都没有解决,最后是解决网易的时候也一起解决的。
人人网使用的OAuth2.0,2.0的协议我没有好好的看过,因为现在只有人人支持2.0所以我偷懒的直接使用了人人的代码,所以,结果是2.0现在只支持人人授权。
人人的代码是直接冲facebooksdk改改就拿来用的,也是有时候看看也觉得真是的,一点都不专业。
已经不记得是在什么地方看到一篇, 作者一上来第一句话就是 "从OAuth可以看出一个互联网企业的技术力", 虽然稍微有些偏激, 但多多少少有值得认同的地方。
OAuth的应用越来越广泛, 互联网企业拿着互联网开发的新年开发着自己的平台, 这是一件很好的事情.从开发角度来说,不得不承认OAuth并不简单, 我也并不精通OAuth, 偷懒了用了别人的库或多或少出现了些问题.。我依然比较郁闷的是, OAuthConsumer本身自己就支持一大堆国外的OAuth, 并且在我看来代码都是没有什么问题的, 到了国内, 标准就不是标准了,标准只是参考, 各家各户按照自己的理解在做。
国内的互联网环境真的是相当有特色的,对此,面对需求和计划,我只能说,先实现功能吧,代码写成什么样先不说了。
国内的开发环境也是比较混乱,因为基本都是代码抄来抄去,有时候并没有真正的去实现,可以想象,服务端的协议制作应该也是一样的,做协议的总是不能够静下心来做事。
由于时间比较紧,我承认我偷懒使用了很多现有的代码。也因为这样,让这个库的功能还不是那么完整,还有很多不是能够比较好的支持。中间百般折腾,给我造成了很多的困扰,自此,也就是支持新浪,腾讯,搜狐,网易,豆瓣和人人的授权。其他的还需要改进。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 豆瓣音乐 的文章

 

随机推荐