2016-11-16 3 views
1

Ich versuche, ein GET in einer UWP (Windows 10) -App zu tun. Ich habe mehrere Möglichkeiten versucht, aber alle immer 401.HTTP-Anfrage mit Basic Auth gibt immer 401 zurück

In Postman funktioniert es gut, aber ich kann 'scheinen, um es in meiner App zu arbeiten. Was vermisse ich.

Dies sind die Methoden, die ich probiert (alle Rück 401):

Methode 1:

 var request = WebRequest.Create("http://api.fos.be/person/login.json?login=200100593&password=pass"); 
     request.Headers["Authorization"] = "Basic MYAUTHTOKEN"; 
     var response = await request.GetResponseAsync(); 

Methode 2:

 const string uri = "http://api.fos.be/person/login.json?login=200100593&password=pass"; 
     var httpClientHandler = new HttpClientHandler(); 
     httpClientHandler.Credentials = new System.Net.NetworkCredential("MYUSERNAME", "MYPASSWORD"); 
     using (var client = new HttpClient(httpClientHandler)) 
     { 
      var result = await client.GetAsync(uri); 
      Debug.WriteLine(result.Content); 

     } 

Methode 3:

 var client = new RestClient("http://api.fos.be/person/login.json?login=200100593&password=pass"); 
     var request = new RestRequest(Method.GET); 
     request.AddHeader("postman-token", "e2f84b21-05ed-2700-799e-295f5470c918"); 
     request.AddHeader("cache-control", "no-cache"); 
     request.AddHeader("authorization", "Basic MYAUTHTOKEN"); 
     IRestResponse response = await client.Execute(request); 
     Debug.WriteLine(response.Content); 

Die dritte Methode ist Code generieren gerade von Postman, also warum funktioniert es dort und nicht in meiner App?

+0

Als @Aaron die richtige Lösung sein, vorausgesetzt, kann und bitte bestätigen auch die '' username' und password' richtig sind. –

Antwort

1

This Thread hat mir geholfen, die Lösung herauszufinden. Ich benutzte http: // aber ich musste es http s machen: //. HTTPS mit dem Code in diesem Thread war die Lösung.

Dies ist meine letzte Code:

public static async void GetPerson() 
    { 
     //System.Diagnostics.Debug.WriteLine("NetworkConnectivityLevel.InternetAccess: " + NetworkConnectivityLevel.InternetAccess); 
     //use this, for checking the network connectivity 
     System.Diagnostics.Debug.WriteLine("GetIsNetworkAvailable: " + System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()); 
     //var msg = new Windows.UI.Popups.MessageDialog("GetIsNetworkAvailable: " + System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()); 
     //msg.ShowAsync(); 
     HttpClient httpClient = new HttpClient(); 
     // Assign the authentication headers 
     httpClient.DefaultRequestHeaders.Authorization = CreateBasicHeader("MYUSERNAME", "MYPASS"); 
     System.Diagnostics.Debug.WriteLine("httpClient.DefaultRequestHeaders.Authorization: " + httpClient.DefaultRequestHeaders.Authorization); 
     // Call out to the site 
     HttpResponseMessage response = await httpClient.GetAsync("https://api.fos.be/person/login.json?login=usern&password=pass"); 
     System.Diagnostics.Debug.WriteLine("response: " + response); 
     string responseAsString = await response.Content.ReadAsStringAsync(); 
     System.Diagnostics.Debug.WriteLine("response string:" + responseAsString); 
    } 
    public static AuthenticationHeaderValue CreateBasicHeader(string username, string password) 
    { 
     byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(username + ":" + password); 
     String logindata = (username + ":" + password); 
     System.Diagnostics.Debug.WriteLine("AuthenticationHeaderValue: " + new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray))); 
     return new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 
    } 
1

Ich würde versuchen, diese zuerst:

Überprüfen Sie Ihre „MYAUTHTOKEN“, ist es in der Regel eine Kombination aus Benutzername: Passwort und ist Basis 64 codiert. Also, wenn Ihr Benutzername „user“ war und das Passwort wurde „bestanden“ Sie base64 kodieren brauchen würde „user: pass“

var request = WebRequest.Create("https://api.fos.be/person/login.json"); 
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Text.Encoding.UTF8.GetBytes("user:pass")); 
var response = await request.GetResponseAsync(); 
+0

Dies funktioniert nicht, es gibt den folgenden Fehler: "Ein Sicherheitsproblem ist aufgetreten. (Ausnahme von HRESULT: 0x800C000E)" – vixez

+0

@Aaron Sollte '' login = 200100593 & password = pass "nicht entfernt werden, wenn Basic Auth verwendet? –

+0

@ThomasSchneiter, ja das würde ich für unnötig halten. Ich werde den Beitrag entsprechend bearbeiten. – Aaron