简体   繁体   English

Twitter API无效或令牌已过期

[英]Twitter API invalid or expired token

I'm trying to use the below code but for some reason I'm getting an invalid or expired token it seemed to work once but never again. 我正在尝试使用以下代码,但是由于某种原因,我得到了无效或过期的令牌,它似乎可以工作一次,但再也无法工作了。

Any ideas? 有任何想法吗? (consumerKey and consumerSecret are constants generated in the class.) (consumerKey和consumerSecret是在类中生成的常量。)

    public ActionResult Index()
    {
        string twitterAccount = System.Configuration.ConfigurationManager.AppSettings["twitterAccount"];
        JsonDeserializer jsonDeserializer = new JsonDeserializer();
        var model = new TwitterVM.LandingModel();

        var qs = GetToken();
        string oauthToken = qs["oauth_token"];
        string oauthTokenSecret = qs["oauth_token_secret"];

        RestClient client = new RestClient("https://api.twitter.com/1.1")
        {
            Authenticator = OAuth1Authenticator.ForProtectedResource(consumerKey, consumerSecret, oauthToken, oauthTokenSecret)
        };
        RestRequest request = new RestRequest("statuses/user_timeline", Method.GET);

        request.Parameters.Add(new Parameter()
        {
            Name = "screen_name",
            Value = twitterAccount,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "count",
            Value = 10,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "include_rts",
            Value = true,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "include_entities",
            Value = true,
            Type = ParameterType.GetOrPost
        });

        IRestResponse response = client.Execute(request);

        model.Tweets =
          jsonDeserializer.Deserialize<List<TwitterVM.Tweet>>(response);

        return View(model);
    }


    private NameValueCollection GetToken()
    {
        RestClient client = new RestClient("https://api.twitter.com") { Authenticator = OAuth1Authenticator.ForRequestToken(consumerKey, consumerSecret) };
        //Do the auth shit...
        RestRequest request = new RestRequest("oauth/request_token", Method.POST);
        IRestResponse response = client.Execute(request);

        return HttpUtility.ParseQueryString(response.Content);
    }

Using Twitter's OAuth2 API ( https://api.twitter.com/oauth2/token ) 使用Twitter的OAuth2 API( https://api.twitter.com/oauth2/token

See https://dev.twitter.com/oauth/application-only for details.... 有关详细信息,请参见https://dev.twitter.com/oauth/application-only

var client = await CreateHttpClient("....", "....");
//don't dispose this client and use for subsequent API calls

var screenName = "....";
var count = 10;
var include_rts = true;
var url = $"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={screenName}&include_rts={include_rts}&count={count}";

var json = await client.GetStringAsync(url);

public static async Task<HttpClient> CreateHttpClient(string consumerKey, string consumerSecret)
{
    var bearerToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(consumerKey + ":" + consumerSecret));
    string url = "https://api.twitter.com/oauth2/token";


    HttpClient client = new HttpClient();

    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Basic " + bearerToken);

    var resp = await client.PostAsync(url, new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded")).ConfigureAwait(false);
    resp.EnsureSuccessStatusCode();
    var result = await resp.Content.ReadAsStringAsync().ConfigureAwait(false);
    var jObj = new JavaScriptSerializer().Deserialize<Dictionary<string,string>>(result);

    if (jObj["token_type"] != "bearer") throw new Exception("Invalid Response From Twitter/OAuth");

    client.DefaultRequestHeaders.Remove("Authorization");
    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + jObj["access_token"]);
    return client;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Linq to Twitter-令牌无效/过期 - Linq to Twitter - Invalid / Expired Token 无效/过期的令牌-401-使用Spring.Social.Twitter未经授权(需要授权) - Invalid / expired Token - 401 - Unauthorized (Authorization Required) using Spring.Social.Twitter 无效或过期令牌返回错误 - Return error on invalid or expired token 刷新过期令牌 Web API - Refresh expired token Web API Sharepoint Provider托管的应用程序:无效的JWT令牌。 令牌已过期 - Sharepoint Provider Hosted App: Invalid JWT Token. The token is expired WCF Web服务中的安全上下文令牌无效或过期 - Invalid or expired security context token in WCF web service HttpClient 403 捕获过期 API Token.Net Core 3.1 - HttpClient 403 Catching Expired API Token .Net Core 3.1 Sendgrid API:提供的授权授权无效、过期或被撤销 - Sendgrid API: The provided authorization grant is invalid, expired, or revoked Twitter api,无法通过 PKCE 的 2/oauth/token 获取 access_token - Twitter api, failed to get access_token by 2/oauth/token with PKCE 未经授权。 访问令牌丢失、无效、受众不正确 (https://cognitiveservices.azure.com) 或已过期 - Unauthorized. Access token is missing, invalid, audience is incorrect (https://cognitiveservices.azure.com), or have expired
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM