oauth_problem=token_rejected when refresh Yahoo';s OAuth访

本文关键字:OAuth Yahoo refresh problem token rejected when oauth | 更新日期: 2023-09-27 17:59:30

我已经用Hammock完成了Oauth,我成功地获得了访问令牌、访问令牌机密和会话句柄,但现在我必须在令牌过期时获得刷新访问令牌。

我已经按照说明进行了操作,我试图通过带有urldecode和没有urldecode的访问令牌,但我无法获得令牌,我获得了

oauth_problem=token_rejected

更新:

这是我的代码:

            ##the call##
            var AccessTokenQuery = OAuthUtil.GetAccessTokenQueryRenewal(accessToken, session_handle, accessTokenSecret);
            AccessTokenQuery.RequestAsync(AppSettings.AccessTokenUri, null);
            AccessTokenQuery.QueryResponse += new EventHandler<WebQueryResponseEventArgs>(AccessTokenQuery_QueryResponse); 
     internal static OAuthWebQuery GetAccessTokenQueryRenewal(string oauth_token,string session_handle, string oauth_token_secret)               
    {
        var oauth = new OAuthWorkflow
        {
            AccessTokenUrl = AppSettings.AccessTokenUri,
            ConsumerKey = AppSettings.consumerKey,
            ConsumerSecret = AppSettings.consumerKeySecret,
            SignatureMethod = OAuthSignatureMethod.HmacSha1,         
            ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
            TokenSecret = oauth_token_secret,
            Token = oauth_token,               
            SessionHandle = session_handle,
            Version = AppSettings.oAuthVersion
        };
        var info = oauth.BuildAccessTokenInfo(WebMethod.Post);
        var objOAuthWebQuery = new OAuthWebQuery(info, false);           
        objOAuthWebQuery.HasElevatedPermissions = true;
        objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
        return objOAuthWebQuery;
    }
 void AccessTokenQuery_QueryResponse(object sender, WebQueryResponseEventArgs e)
    {
        try
        {
            StreamReader reader = new StreamReader(e.Response);
            string strResponse = reader.ReadToEnd();
            var parameters = MainUtil.GetQueryParameters(strResponse);
            accessToken = parameters["oauth_token"];
            accessTokenSecret = parameters["oauth_token_secret"];
            session_handle = parameters["oauth_session_handle"];
            MainUtil.SetKeyValue<string>("AccessToken", accessToken);
            MainUtil.SetKeyValue<string>("AccessTokenSecret", accessTokenSecret);
            MainUtil.SetKeyValue<string>("SessionHandle", session_handle);

            userLoggedIn();
        }
        catch (Exception ex)
        {
            Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show(ex.Message);
            });
        }
    }

oauth_problem=token_rejected when refresh Yahoo';s OAuth访

你可以尝试的快速可能性:你说你"试图用urldecode传递访问令牌"。你试过使用urlencode吗?URL代码用于解码从web调用返回的URL,编码是在传递到web调用之前完成的。

另外,请注意,Oauth的编码方案与.NET默认编码中使用的编码方案略有不同。不过,您可以轻松地编写自己的编码例程,详细信息请查看oauth规范。

例如:

    private string UrlEncode(string value)
    {
        string unreserved = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
        StringBuilder result = new StringBuilder();
        foreach (char symbol in value)
        {
            if (unreserved.IndexOf(symbol) != -1)
                result.Append(symbol);
            else
                result.Append('%' + String.Format("{0:X2}", (int)symbol));
        }
        return result.ToString();
    }