AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

NTLM Authentication

Ein Thema von user0815 · begonnen am 11. Sep 2017 · letzter Beitrag vom 24. Jul 2021
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

NTLM Authentication

  Alt 11. Sep 2017, 11:28
Hallo,
ich soll mich per NTLM Authentication mit einem Server verbinden um Daten zu erhalten.
Rufe ich die URL als einfachen HTTP Request auf, so erhalte ich vom Server:

Content-Type: text/html
Server: Microsoft-IIS/7.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET

HTTP-Authentifizierungsschemen

So wie ich es bis jetzt mache funktioniert es nicht (kann Änderungen hier vor Ort leider auch nicht testen):

Delphi-Quellcode:
procedure TFormMain.SendXmlOrderRequest(var XMLDoc: IXMLDocument; Url: String);
var
  Response: String;
  Send: TStringStream;
begin
    Send := TStringStream.Create(Utf8Encode(XMLDoc.Xml.Text));

    IdHTTP.Request.BasicAuthentication := false;
    IdHTTP.Request.Username := '';
    IdHTTP.Request.Password := '';

    IdHTTP.Request.Host := 'devap3';
    IdHTTP.Request.ContentType := 'text/xml';
    IdHTTP.Request.Charset := 'utf-8';
    IdHTTP.Request.AcceptCharSet := 'utf-8';
    IdHTTP.Request.ContentLength := Send.Size;
    IdHTTP.Request.CustomHeaders.Values['SOAPAction'] := 'http://tempuri.org/CheckOrder';

    IdHTTP.HTTPOptions := [hoForceEncodeParams, hoInProcessAuth];
    IdHTTP.ProtocolVersion := pv1_1;
   
    try
      Response := IdHTTP.Post(Url, Send);
    except
      on E: Exception do
      begin
      MemoDebug.Lines.Append('Exception HTTP: ' + E.Message);
      // erhalte dies als Ausgabe
      // Exception HTTP: Operation abgebrochen
      end;
    end;
    IdHTTP.Disconnect;   
end;

procedure TFormMain.IdHTTPAuthorization(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean);
begin
  Authentication.Username := FUsername;
  Authentication.Password := FPassword;

  MemoDebug.Lines.Append('onAuthorization: ' + Authentication.Authentication);
  // erhalte dies als Ausgabe
  // onAuthorization: NTLM TlRMTVNTUAAB7AAAB7IAAAgACAAgAA7ACgAKACgAAABET00wOTgxMERBREEwOTgxMDM=

  Handled := true;
end;

procedure TFormMain.IdHTTPSelectAuthorization(Sender: TObject; var AuthenticationClass: TIdAuthenticationClass;
  AuthInfo: TIdHeaderList);
begin
  AuthenticationClass := TIdNTLMAuthentication;
end;
Kann jemand erkennen was ich falsche mache?
Hat jemand evtl. ein funktionierendes Beispiel?

Grüße
user0815
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

AW: NTLM Authentication

  Alt 11. Sep 2017, 13:27
Schau mal hier:
https://www.innovation.ch/personal/ronald/ntlm.html
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#3

AW: NTLM Authentication

  Alt 12. Sep 2017, 08:31
Ich habe eine NTML Komponente bei: http://www.nsoftware.com/ipworks/auth/ gefunden.
Diese soll 1.599 € kosten...
Zudem besitze ich eine Delphi 10.1 Berlin Lizenz. Bei dieser ist IP*Works! V9 [Build 6275] mit dabei, die NTML Komponente aber nicht.
Dann fahre ich ja besser wenn ich meine bestehende Delhi Version auf Delphi 10.2 Tokyo Update, das würde dann 1,127.76 € kosten.
https://www.embarcadero.com/de/app-d...s-store/delphi

Frage: Ist die "NTML Komponente" unter "IP*works!" bei "Delphi 10.2 Tokyo" enthalten ?

Sehe gerade das http://cdn.nsoftware.com/help/IA9/dlp/NTLM.htm auch in V9 enthalten ist.
Bei der ipwHTTP1 Komponente kann man unter "AuthScheme" "authNtlm" auswählen. Werde mich mal damit beschäftigen...

Geändert von user0815 (12. Sep 2017 um 08:43 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: NTLM Authentication

  Alt 12. Sep 2017, 10:11
Hallo,

in der IP*Works v9 Delphi Edition ist TipaNTLM nicht vorhanden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: NTLM Authentication

  Alt 13. Sep 2017, 08:53
Ist eine der Units IdAuthenticationNTLM oder IdAuthenticationSSPI in der uses Liste? Eine dieser Dateien muss enthalten sein.

Eine Garantie, dass sie wie erwartet funktionieren, gibt es für Indy allerdings nicht - siehe Stack Overflow Kommentar vom Juni:

https://stackoverflow.com/questions/...ntication-ntlm
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#6

AW: NTLM Authentication

  Alt 13. Sep 2017, 09:01
Hallo,
ich muss nochmal Fragen: Ist die "AUTH" Komponente welche NTLM enthält unter "IP*works!" bei "Delphi 10.2 Tokyo" bereits enthalten ?


@mjustin: Ja, habe die IdAuthenticationNTLM in den ueses.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: NTLM Authentication

  Alt 13. Sep 2017, 16:16
Hallo,

ist in Tokyo nicht dabei - siehe auch den Anhang.

Grüße
Klaus
Miniaturansicht angehängter Grafiken
ipworks_tokyo.jpg  
Klaus
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: NTLM Authentication

  Alt 13. Sep 2017, 16:51
Müssen für die NTLM Authentication Client und Server nicht in 'befreundeten' Netzen/Domänen (Vertrauensstellungen) sein?

Von https://msdn.microsoft.com/en-us/lib...v=vs.85).aspx:

Zitat:
"Interactive NTLM authentication over a network typically involves two systems: a client system, where the user is requesting authentication, and a domain controller, where information related to the user's password is kept. Noninteractive authentication, which may be required to permit an already logged-on user to access a resource such as a server application, typically involves three systems: a client, a server, and a domain controller that does the authentication calculations on behalf of the server."
Im ersten Fall muss die Gegenseite der Domänencontroller sein, im zweiten Fall ist ebenfalls ein Domänencontroller erforderlich, und der Client muss bereits an der Domäne angemeldet sein.
Michael Justin
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#9

AW: NTLM Authentication

  Alt 14. Sep 2017, 14:09
Zitat:
Delphi-Quellcode:
procedure TFormMain.IdHTTPAuthorization(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean);
begin
  Authentication.Username := FUsername;
  Authentication.Password := FPassword;

  MemoDebug.Lines.Append('onAuthorization: ' + Authentication.Authentication);
  // erhalte dies als Ausgabe
  // onAuthorization: NTLM TlRMTVNTUAAB7AAAB7IAAAgACAAgAA7ACgAKACgAAABET00wOTgxMERBREEwOTgxMDM=

  Handled := true;
end;
Kann jemand erkennen was ich falsche mache?
Hat jemand evtl. ein funktionierendes Beispiel?
Ich komm da nochmal auf dein Ursprungsfrage zurück.

Diesen String den du da bekommst "NTLM TlRMTVNTUAAB7AAAB7IAAAgACAAgAA7ACgAKACgAAABET00wOT gxMERBREEwOTgxMDM=" ist eine Challenge. Diese musst du nur auseinander nehmen und mit dem Benutzer/Passwort eine Antwort berechnen. Diese schickst du dann an den Server zurück.

Das ist etwas im Link erklärt den ich zuerst geschickt hatte.
NTLM ist ein Challenge/Response verfahren, welche nicht das Passwort an den Server überträgt.

Die Felder Authentication.Username und Authentication.Pass greifen hier nicht, da Indy an dieser Stelle nicht mit diesem Verfahren (NTLM) umgehen kann.
Du kannst das etwas mit BASIC und DIGEST Authentifizierung vergleichen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#10

AW: NTLM Authentication

  Alt 14. Sep 2017, 14:27
Hier werden alle Schritte beschrieben, wie der Client die Challenge beantwortet (und was der Server dann macht, um sie zu prüfen):

https://blogs.msdn.microsoft.com/chi...-how-it-works/

Clientseitig ist der Schritt 5 wichtig:

"The client encrypts this challenge with the hash of the user's password and returns the result to the server. This is called the response."
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz