当前位置: 代码迷 >> Web Service >> 使用Yahoo api出错401 Unauthorized
  详细解决方案

使用Yahoo api出错401 Unauthorized

热度:162   发布时间:2016-05-02 02:25:09.0
使用Yahoo api报错401 Unauthorized
各位大侠,遇到一个问题,一直解决不了,找不到原因,
使用yahoo api过程中报错,401 Unauthorized
授权都成功,https://api.login.yahoo.com/oauth/v2/get_request_token,https://api.login.yahoo.com/oauth/v2/request_auth,https://api.login.yahoo.com/oauth/v2/get_token,这几个API都成功,拿到了最终的oauth_token,oauth_token_secret,guid等数据。但是问题来了,当我用 social profile的api时候,就报错了,
string url = string.Format("http://social.yahooapis.com/v1/user/{0}/profile?format=json", YahooToken.xoauthYahooGuid); 
,参考地址:http://developer.yahoo.com/oauth/guide/oauth-make-request.html,构造请求的那些数据,如nonce,timestamp,signature用的BaseOAuth类(http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs),授权过程中用的是PLAINTEXT方式,使用http://social.yahooapis.com/v1/user/{0}/profile?format=json api的时候用的是HMACSHA1方式。
有一个实例参考(http://blog.sina.com.cn/s/blog_7648f7170100qcdz.html),我也按照那上面的写的,授权登入成功,最后用user profile api也还是不行,一直报401.。。。崩溃了。。。。。。。
求各位大侠帮忙!!!!!!!!!!!!!!!!!!!
这到底啥原因!!!!!!!!!
顺便再吐槽一下。用过oauth2.0,觉得oauth 1.0 真心蛋疼。
求助!!!!!!!!!!!!!!!!!!!!!!!!!!!
string nUrl, nParams;
                string nonce = this.GenerateNonce();
                string timestamp = this.GenerateTimeStamp();
                string UrlData = string.Format("http://social.yahooapis.com/v1/user/" + YahooToken.xoauthYahooGuid + "/profile?format=json");
                string signature = this.GenerateSignature(new Uri(UrlData), clientID, clientSecret, YahooToken.oauthToken, YahooToken.oauthTokenSecret, "GET", timestamp, nonce, out nUrl, out nParams);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(UrlData));
                request.Method = "GET";
                StringBuilder sb = new StringBuilder();
                sb.Append("Authorization: OAuth ");
                sb.Append("realm=\"yahooapis.com\"");
                sb.Append(",oauth_consumer_key=\"" + clientID + "\"");
                sb.Append(",oauth_nonce=\"" + nonce + "\"");
                sb.Append(",oauth_signature_method=\"HMAC-SHA1\"");
                sb.Append(",oauth_timestamp=\"" + timestamp + "\"");
                sb.Append(",oauth_token=\"" + YahooToken.oauthToken + "\"");
                sb.Append(",oauth_version=\"1.0\"");
                sb.Append(",oauth_signature=\"" + this.UrlEncode(signature) + "\"");
                request.Headers.Add(sb.ToString());
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

------解决方案--------------------

------解决方案--------------------
最近也在研究oauth,对于你这个问题,只能爱莫能助了
  相关解决方案