在 Twitter 上验证 OAuth 令牌

Posted

技术标签:

【中文标题】在 Twitter 上验证 OAuth 令牌【英文标题】:Verify OAuth Token on Twitter 【发布时间】:2011-09-03 13:26:57 【问题描述】:

在用户完成 oauth 进程后,我将来自 Twitter 的 oauth 信息存储在 Flash Cookie 中。 Twitter 表示,只有当 Twitter 或用户撤销应用程序的访问权限时,此令牌才会过期。

我可以打电话给 Twitter 以验证我存储的令牌没有被撤销吗?

【问题讨论】:

【参考方案1】:

如果访问令牌过期,所有需要身份验证的 API 方法都将失败。但是验证用户是谁以及访问令牌仍然有效的具体方法是GET account/verify_credentials

【讨论】:

顺便说一句 - 现在是 dev.twitter.com/docs/api/1.1/get/account/verify_credentials,适用于 API 1.1 版【参考方案2】:

这个问题可能很老,但这个问题是为谷歌人(比如我自己)准备的。

这是使用 Hammock 对 twitter 的调用:

    RestClient rc = new RestClient Method = WebMethod.Get;
            RestRequest rr = new RestRequest();
            rr.Path = "https://api.twitter.com/1/account/verify_credentials.json";
            rc.Credentials = new OAuthCredentials
                                 
                                     ConsumerKey = /* put your key here */,
                                     ConsumerSecret = /* put your secret here */,
                                     Token = /* user access token */,
                                     TokenSecret = /* user access secret */,
                                     Type = OAuthType.AccessToken
                                 ;
            rc.BeginRequest(rr, IsTokenValid);

回复如下:

    public void IsTokenValid(RestRequest request, RestResponse response, object userState)
    
        if(response.StatusCode == HttpStatusCode.OK)
        
            var user = userState;
            Helper.SaveSetting(Constants.TwitterAccess, user);
        
        else
        
            Dispatcher.BeginInvoke(() => MessageBox.Show("This application is no longer authenticated "))
        
    

我总是从 SO 那里借用解决方案,这是我第一次尝试回馈,尽管这个问题已经很晚了。

【讨论】:

【参考方案3】:

手动调试时:

curl \
   --insecure https://api.twitter.com/1/account/verify_credentials.json?oauth_access_token=YOUR_TOKEN

【讨论】:

第 1 版 twitter api 不再有效。您需要使用需要 oauth 流程的 1.1 api,因此您不能再只传递令牌。 我们现在如何使用 1.1 来做到这一点?应该在标头中传递访问令牌和访问秘密吗?钥匙是什么?【参考方案4】:

我正在使用TwitterOAuth API,这是基于接受的答案的代码。

$connection     =   new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $twitter_oauth_token, $twitter_oauth_secret); 
$content        =   $connection->get("account/verify_credentials");                        
if($connection->getLastHttpCode() == 200):
    // Connection works fine.
else:
    // Not working
endif;

【讨论】:

以上是关于在 Twitter 上验证 OAuth 令牌的主要内容,如果未能解决你的问题,请参考以下文章

通过 ServiceStack api 使用 Linq2Twitter 和缓存的 OAuth 令牌

TwitteR、ROAuth 和 Windows:注册成功,但证书验证失败

将Zend_Service_Twitter_Search与经过身份验证的请求一起使用

Node.js 护照 OAuth 2.0 身份验证:存储访问和刷新令牌的位置

使用 oauth 和 twitter ruby​​ gem 时不断收到 OAuth::Unauthorized 错误

iOS 5 Twitter 框架。获取用户的 OAuth 访问令牌