AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mit IdHTTPServer eigene Login-Seite realisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit IdHTTPServer eigene Login-Seite realisieren?

Ein Thema von FriFra · begonnen am 1. Aug 2009 · letzter Beitrag vom 2. Aug 2009
Antwort Antwort
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 11:56
Wie kann man es hinbekommen, dass man die Authentifizierung am IdHTTPServer statt mit dem Standard-Dialog über eine Webseite macht?
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
zacki05

Registriert seit: 14. Dez 2007
1 Beiträge
 
#2

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 14:51
Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  sr:TSearchRec;

begin
if (Pos('/login', LowerCase(aRequestInfo.Document)) = 1) then
begin
   aresponseinfo.ContentType:='text/html';
   if arequestinfo.Params.Values['ParamName']='then
   begin
   aresponseinfo.ContentText:='<head><meta http-equiv="pragma" content="no-cache">'
   +'</head><html><body>
<form method="POST">

Name: <input type="text" Name="ParamName"</p>
'
   +'

<input type="Submit" value="&Login"></p> </form></body></html>
';
   end
   else
   if arequestinfo.Params.Values['ParamName']='Passwortthen
begin
   aresponseinfo.ContentType:='text/html';
   AResponseinfo.ContentText:=
   '<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">'
   +'<title> Dateiliste </title></head><body><H1> Dateiliste </H1>'
   +'<hr color= "blue" />
<pre>
' ; //<pre>[url="/"][To Parent Directory][/url]
   if FindFirst(extractfilepath(paramstr(0))+'\*.*',$7f, sr) = 0 then
    begin
      repeat
        if sr.Size> 0 then
         AResponseinfo.ContentText:=AResponseinfo.ContentText+format('%-20.20s%7s', [datetimetostr(FileDateToDateTime(sr.Time)),inttostr(sr.Size)])
 +'[url="/download/'+sr.name+'"]'+sr.name+'[/url]
' ;
      until FindNext(sr) <> 0;
      FindClose(sr);
     AResponseinfo.ContentText:=AResponseinfo.ContentText+'</pre><hr color= "blue" /></body></html>';
    end;
exit;
end
   else
   aResponseInfo.ResponseNo := 403;

   exit;

end;
So funktioniert das bei mir
"http://irgentwas/login" führt auf die Seite mit einem Editorfeld.
dort gibt man das Passwort ein.
bei erfolg sieht mas das Inhaltsverzeichniss.

zacki05

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 20:19
Das ist natürlich keine echte Authentifizierung... Ich dachte da eher daran anhand von per form (get oder post) übertragenem Usernamen und Passwort die Authentication selbst zu erzeugen:
Delphi-Quellcode:
...

ARequestInfo.Authentication.Create; //Authentication erzeugen (=> Schutzverletzung)
ARequestInfo.Authentication.Username := sUN; //Feldwerte zuweisen (=> ohne create, auch Schutzverletzung)
ARequestInfo.Authentication.Password := sPW;

...

// Wenn User authentifiziert ist...
if ARequestInfo.AuthExists then
begin

...
Ich bekomme dabei allerdings immer eine Schutzverletzung
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 22:19
@Frifra: RequestInfo ist eben vom Request und nicht für die Response. Entsprechend solltest du aus RequestInfo auch nur lesen! Zudem befindet sich unter ARequestInfo.Authentication.Username eben der Benutzername welcher über den Standarddialog eingegeben wurde (also der welcher bei einem Apache-Server per .htaccess mit Basic Authentication eingeleitet wird).

Zitat:
Ich dachte da eher daran anhand von per form (get oder post) übertragenem Usernamen und Passwort die Authentication selbst zu erzeugen:
Wie jetzt? Per get/post werden doch Daten vom Client zum Server übertragen. Entsprechend kannst du nicht auf dem Server was eingeben und dem Client rüber reischen.
Wie sollte das ganze denn ablaufen (aus Sicht Anwender vor Browser)?
Es ist doch so das der Anwender(Client) eine Seite aufruft und diese vom Server zurückgegeben wird. Dort trägt der Nutzer(Client) dann seine Daten clientseitig in eine Art Formular ein und schickt diese wieder an den Server. Der Server kann dann auswerten was der Client per post/get übermittelt hat und kann entsprechend das eine oder andere als Antwort schicken.

[Edit]Das was hier ( http://www.delphipraxis.net/internal...=848581#848581 ) gefragt wurde und laut diesem Thread auch FriFras anliegen ist wurde von zacki05 bereits gepostet. Der Server liefert Daten für eine html-seite mit Formular zurück und wenn Daten an den Server mit entsprechenden Formulardaten geschickt werden reagiert dieser auch darauf und schickt eine entsprechend andere Seite.
Zur besseren Übersicht würde man den eigentlichen Webseiten-Quelltext in den meisten Fällen zwar in einer externen Datei oder Ressource lagern und von da laden, aber das Prinzip ist exakt das gleiche.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 22:40
Zitat von SirThornberry:
@Frifra: RequestInfo ist eben vom Request und nicht für die Response. Entsprechend solltest du aus RequestInfo auch nur lesen! Zudem befindet sich unter ARequestInfo.Authentication.Username eben der Benutzername welcher über den Standarddialog eingegeben wurde (also der welcher bei einem Apache-Server per .htaccess mit Basic Authentication eingeleitet wird).
Ich würde halt gern versuchen anhand der über das Formular vom Client versandten Daten quasi eine Basic Authentifizierung zu simulieren, indem ich die Parameter, die normalerweise über den dialog eingegeben werden mit den bereits an den Server übermittelten Formulardaten zu initialisieren. Ziel der Übung ist, dass ARequestInfo.AuthExists True ist (das bleibt es ja bei Basic authentication auch wärend der gesamten Browser-Session).

Zitat von SirThornberry:
Es ist doch so das der Anwender(Client) eine Seite aufruft und diese vom Server zurückgegeben wird. Dort trägt der Nutzer(Client) dann seine Daten clientseitig in eine Art Formular ein und schickt diese wieder an den Server. Der Server kann dann auswerten was der Client per post/get übermittelt hat und kann entsprechend das eine oder andere als Antwort schicken.
Und wie stellst du dir das vor? Soll ich vor jede Seite erst eine Loginseit schalten? Ich benötige eine persistente Session, die nicht für jede URL neu simuliert werden muss. Ich habe halt nicht nur eine seite, die man dann nur mit einem Formular schützen könnte. Nach Deinem Vorschlag wären ja beim aufruf der 2. Seite wieder keine authentifizierungsdaten mehr da, so dass das spiel von vorne los gehen würde...
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 22:57
Zitat:
Ich habe halt nicht nur eine seite, die man dann nur mit einem Formular schützen könnte. Nach Deinem Vorschlag wären ja beim aufruf der 2. Seite wieder keine authentifizierungsdaten mehr da, so dass das spiel von vorne los gehen würde...
Schau dir mal die ganzen Foren an. Da wird nach erfolgreichem einloggen eine SessionID generiert welche bei jedem folgenden Seitenaufruf mit gesendet wird (oder sie wird eben in einem Cookie plaziert und bleibt somit erhalten und wird ebenfalls immer mitgesendet)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 23:05
Zitat von SirThornberry:
Zitat:
Ich habe halt nicht nur eine seite, die man dann nur mit einem Formular schützen könnte. Nach Deinem Vorschlag wären ja beim aufruf der 2. Seite wieder keine authentifizierungsdaten mehr da, so dass das spiel von vorne los gehen würde...
Schau dir mal die ganzen Foren an. Da wird nach erfolgreichem einloggen eine SessionID generiert welche bei jedem folgenden Seitenaufruf mit gesendet wird (oder sie wird eben in einem Cookie plaziert und bleibt somit erhalten und wird ebenfalls immer mitgesendet)
Sorry, ich hab dazu bisher überhaupt noch nichts gefunden. Wie muss ich mir das "mitsenden" der Session-ID vorstellen? Über Parameter? Ich kann in meinem HTTP Code keine Cookies verarbeiten... da ich größtenteils nur "Content-Type: text/text" übertrage (Ajax Anwendung) und die URLs OHNE zusätzliche Parameter auskommen müssen. mit der basic-authentication klapps... nur heutzutage sollte man das schon über ein formular machen..
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 23:12
richtig, die Session-ID wird in allen mir bekannten Fällen (wenn Cockies deaktiviert sind) per Get übergragen (also im Browser an die URL angehangen). Wenn du in deinem Browser die Cockies mal deaktivierst und hier in der DP unterwegs bist solltest du dann entsprechend in der Adressleiste das ganze erspähen können.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 1. Aug 2009, 23:16
Dann ist es leider für mich nicht brauchbar... bei Basic-authentication benötige ich weder Cookies, noch irgendwelche Parameter.... Also müsste ich doch irgendwie eine Basic-Authentication quasi in den Request "injizieren" um alle folgenden Seiten mit dieser Anmeldung zu bekommen.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
mjustin

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

Re: Mit IdHTTPServer eigene Login-Seite realisieren?

  Alt 2. Aug 2009, 09:40
Zitat von FriFra:
Dann ist es leider für mich nicht brauchbar... bei Basic-authentication benötige ich weder Cookies, noch irgendwelche Parameter.... Also müsste ich doch irgendwie eine Basic-Authentication quasi in den Request "injizieren" um alle folgenden Seiten mit dieser Anmeldung zu bekommen.
Ob's hilft weiss ich nicht, aber mit einem HTTP Proxy (Don's Proxy auf Sourcforge, oder einem Plugin wie Live HTTP Headers) kann man sich die gesamte Authentifizierungsabfolge schön ansehen.

Bei Basic Authentifizierung sind allerdings auch Parameter im Spiel, nicht in der URL, aber im HTTP Header. - Muss ja, wo sonst

Und einen Authentifizierungs-Request-Header des Clients durch den Server setzen lassen zu können, ist im HTTP Protokoll, soviel ich weiss, nicht vorgesehen.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:12 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