2016-12-14 17 views
0

タイトルが述べるように、OAuth1.0認証の最初の部分は、リクエストトークンを取得するだけです。私はC#を使用してコンソールアプリケーションでこれをやっています。私はこれで3日間作業していますが、インターネットから数多くのサンプルを試しましたが、これまでのところ何もできません。これは、認証(http://rest-service.guides.spring.io/greetingをのような)せずにAPIを消費したときに美しく動作しますが、このようにそれを実行するときに禁断の401を受信C#でOauth1を使用してREST APIからリクエストトークンを取得

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net.Http; 
using System.Net.Http.Headers; 


namespace MCAPIClient 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      RunAsync().Wait(); 
     } 

     static async Task RunAsync() 
     { 
      using (var client = new HttpClient()) 
      { 

       var values = new Dictionary<string, string> 
       { 
        { "oauth_consumer_key", "<my consumer key>" }, 
        { "oauth_consumer_secret", "<my secret key>" } 
       }; 

       var content = new FormUrlEncodedContent(values); 

       var response = await client.PostAsync("https://app.masteryconnect.com/oauth/request_token", content); 

       var responseString = await response.Content.ReadAsStringAsync(); 

       Console.WriteLine(response.Headers); 

       Console.WriteLine("Press any key to continue..."); 
       Console.ReadKey(true); 
      } 
     } 

    } 
} 

:ここに私の現在の試みです。私は何が欠けていますか?ところで、私はAPIの新しいブランドです。

答えて

0

キーとシークレット、またはユーザー名とパスワードが必要です。 access_tokenを取得するには、両方とも非常に必要です。 私はapiの場合には、より多くの人生を楽にするGoogleの郵便配達のツールを使用することをお勧めします。 以下のコードはあなたの問題を解決します。

WebRequest req = WebRequest.Create(url); 
     req.Method = "POST"; 
     req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("key:Secret")); 
     req.Credentials = new NetworkCredential("username", "password"); 


     var postData = "grant_type=client_credentials"; 

     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     req.ContentType = "application/x-www-form-urlencoded"; 
     req.ContentLength = byteArray.Length; 
     Stream dataStream = req.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 
     WebResponse response = req.GetResponse(); 
     // Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     dataStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 
     string responseFromServer = reader.ReadToEnd(); 

     Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(responseFromServer); 

     String status = (string)o.SelectToken(".access_token"); 
関連する問題