2016-10-10 6 views
1

私はUWPで小さなTwitterアプリケーションを開発したいと思っています。UWPでTwitterのoauth2を実装する方法は?

  • のGETのOAuth/
  • のPOSTのOAuth2/POSTののOAuth2/
  • トークン
  • invalidate_token request_token
  • のPOSTのOAuth/access_tokenは
  • POSTのOAuthの/認可/
  • GETのOAuthの認証

    詳細です。よくわかりません。だから私はComsumerKey、ComsumerKeySecret、Callback UriによってTwitterにログインしたい。 api.twitter.comからデータにアクセスするためにaccess_tokenを入手してください。 私は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

    を動作するはず?クライアント固有のデータまたはパブリックデータがある場合は、ユーザデータのフローが異なります –

    +0

    最初に、ログインが必要で、アクセストークンを取得する前に... –

    答えて

    0

    これは、あなたがどのようなAPIにアクセスしている

    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

    関連する問題