none
Problem unter MVC5 auf dem IIS 7.5 Authorization fehlt RRS feed

  • Frage

  • Hallo NG,

    ich habe in einer dll eine Funktion welche in einem Thread Daten per Html übermittelt:

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(htmlStrg);
        request.Timeout = 10000;
        request.Credentials = new NetworkCredential("UserName", "Password");
        request.PreAuthenticate = true;
        request.Method = "GET";

    Diese Funktion wird von meiner Win-Form Anwendung und von meiner MVC5 Anwendung genutzt. Wenn ich den Aufruf in der Win-Form Anwendung ausführe klappt alles.

    Wird diese Funktion von meiner MVC5 Anwendung aufgerufen, dann kommt an der Gegenstelle die Authorization nicht an.

    Aufruf per Win-Form:

    GET
    sasasasasasa
    HTTP/1.1
    Authorization: Basic dGFsay1pcDpqb280U2hv
    Host: xyz

    der selbe Aufruf über MVC5.

    GET
    sasasasasasa
    HTTP/1.1
    Host: xyz

    Hat jemand eine Idee warum die Authentifizierung fehlt???

    Danke für jeden Hinweis und Tipp im voraus.

    Grüße Ingo


    • Bearbeitet IngoManthey Freitag, 20. Februar 2015 19:49
    Freitag, 20. Februar 2015 19:49

Antworten

Alle Antworten

  • Hallo Ingo,

    probier mal, die Credentials in den CredentialCache zu stecken und diesen dann zuzuordnen.

      http://stackoverflow.com/questions/1702426/httpwebrequest-not-passing-credentials

    Auch wenn das Beispiel dort nur für NTLM angegeben ist, geht das mit BASIC auch.

    Wichtig ist, dass der URL korrekt angegeben wird.

    PreAuthenticate solltest Du nicht auf true setzen, das bewirkt nicht das, was Du wahrscheinlich denkst. Siehe dazu:

      http://weblog.west-wind.com/posts/2010/Feb/18/NET-WebRequestPreAuthenticate-not-quite-what-it-sounds-like

    Wenn der Server keine 401 Antwort schickt, werden die Authentifizierungsdaten beim ersten dennoch nicht gesendet. Du kannst damit also nicht dafür sorgen, dass die sofort ankommen. Erst bei ggfs. gesendeten Folgerequests, die müssen aber vom selben Objekt kommen.

    Ob es hier einen Unterschied bei WinForms und ASP.NET als ausführendes "Organ" gibt, weiß ich nicht, kann es mir nur schwer vorstellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 20. Februar 2015 21:57
    Moderator
  • Hallo Stefan,

    zuerst einmal Danke für Deine Hilfe.

    Ich werde mal dieses versuchen:

    string credentials = String.Format("{0}:{1}", username, password);
    byte[] bytes = Encoding.ASCII.GetBytes(credentials);
    string base64 = Convert.ToBase64String(bytes);
    string authorization = String.Concat("Basic ", base64);
    request.Headers.Add("Authorization", authorization);

    sowie PreAuthenticate auf false zu setzen.

    Ich kann das aber erst Montag testen, wenn ich jemanden in Deutschland habe der mir bestätigt das er die SMS erhält.

    Das mit der Server Antwort ist mir klar. Ich bekomme ja auch eine Antwort. Wie schon geschrieben ich nutze diese Klasse unter Win-Forms und MVC und unter Win-Forms läuft ja alles ohne Probleme.

    Grüße  Ingo

    Samstag, 21. Februar 2015 12:53
  • Hallo Stefan,

    ich habe in Deutschland jemanden erreicht, jetzt klappt es.

    1.000 Dank für den Tipp. Leider verstehe ich nicht warum die :

    request.Credentials = new NetworkCredential("UserName", "Password");

    auf dem IIS nicht funktionieren.

    Grüße aus Brasilien
    Ingo

    Samstag, 21. Februar 2015 13:24
  • Hallo Ingo,

    hast Du es denn mal mit dem CredentialCache probiert? Das wäre eigentlich meine erste Wahl gewesen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Samstag, 21. Februar 2015 13:29
    Moderator
  • Hallo Stefan,

    nein hatte ich nicht.

    Danke

    Gruß Ingo

    Sonntag, 22. Februar 2015 16:36