如何在UWP上实现Twitter的oauth2?

问题描述:

我想在UWP上开发一个小型的twitter应用程序。如何在UWP上实现Twitter的oauth2?

  • 取得OAuth /认证
  • 取得OAuth /授权
  • POST的OAuth/ACCESS_TOKEN
  • POST的OAuth/request_token
  • POST的oauth2/invalidate_token
  • POST的oauth2 /令牌

这是更多的信息。我很困惑。所以我想通过ComsumerKey,ComsumerKeySecret,Callback Uri登录到Twitter。并获取access_token从api.twitter.com访问数据。 我认为我必须在使用POST oauth2/token之前(是否错误?)。

<!-- begin snippet: C# hide: false console: true babel: false --> 

<!-- language: lang-html --> 

public async Task<string> GetAccessTokenBYAuthorizeTwitter() 
     { 
      //throw new NotImplementedException(); 
      var client = new HttpClient(); 
      string postData = "grant_type=client_credentials"; 
      var request = await client.PostAsync(ResourceUrl,new StringContent(postData)); 
      //request headers 
      client.DefaultRequestHeaders.Add("Authorization", string.Format("Basic {0}", Convert.ToBase64String(Encoding.UTF8.GetBytes(ComsumerKeyAndSecret)))); 
      client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

      return await request.Content.ReadAsStringAsync(); 
     } 

<!-- end snippet --> 

例如:我尝试登录Vimeo并成功。

public async Task<string> AuthorizeWithVimeo() 
    { 
     var clientId = "b8e1bff5d5d1f2c90f61017b135960adb42f5fe2"; 

     var SpotifyUrl = "https://api.vimeo.com/oauth/authorize?client_id=" + Uri.EscapeDataString(clientId) + "&response_type=code&redirect_uri=" + Uri.EscapeDataString("https://example/callback") + "&state=xyzbc"; 
     var StartUri = new Uri(SpotifyUrl); 
     var EndUri = new Uri("https://example/callback"); 

     WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, StartUri, EndUri); 
     if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success) 
     { 
      var responseData = WebAuthenticationResult.ResponseData; 

      //await GetSpotifyUserNameAsync(WebAuthenticationResult.ResponseData.ToString()); 
      return responseData; 
     } 
     else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp) 
     { 
      return $"HTTP Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseErrorDetail.ToString()}"; 
     } 
     else 
     { 
      return $"Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseStatus.ToString()}"; 
     } 
    } 
+0

你访问哪些API?客户特定或公共数据有不同的用户数据流 –

+0

第一,我需要登录并获取访问令牌之前...... –

这应该工作

var client = new HttpClient(); 

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic", 
    Convert.ToBase64String(
     Encoding.ASCII.GetBytes(
      string.Format("{0}:{1}", Uri.EscapeDataString(oauth_consumer_key), 
          Uri.EscapeDataString(oauth_consumer_secret))))); 

client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip"); 
client.DefaultRequestHeaders.TryAddWithoutValidation("Host", "api.twitter.com"); 

var content = new StringContent(postBody); 
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); 
HttpResponseMessage response =await client.PostAsync(oauth_url, content); 
response.EnsureSuccessStatusCode(); 

using (var responseStream = response.Content.ReadAsStreamAsync()) 
using (var decompressedStream = new GZipStream(responseStream.Result, CompressionMode.Decompress)) 
using (var streamReader = new StreamReader(decompressedStream)) 
{ 
var rawJWt = streamReader.ReadToEnd(); 
var jwt = JsonConvert.DeserializeObject(rawJWt); 
} 

More info