AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Frage zur Architektur/Technik einer Webanwendung

Frage zur Architektur/Technik einer Webanwendung

Ein Thema von Darlo · begonnen am 10. Jan 2017 · letzter Beitrag vom 11. Jan 2017
Antwort Antwort
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.009 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Frage zur Architektur/Technik einer Webanwendung

  Alt 10. Jan 2017, 20:23
Guten Abend,

ich würde gerne ein Webprojekt angehen, dass folgende Anforderungen erfüllen soll:

1. User sollen sich auf der Webseite (eigener Server) einloggen können und diverse Funktionen die userspezifische Datenbank-Operationen beinhalten ausführen können. Wichtig ist hier natürlich, dass jeder User nur Zugriff auf seine Daten hat.

2. Andere Webseitenbetreiber sollen Funktionen von mir als Plugin in ihre Homepage integrieren können. Dabei sollen sie die Seite per css an ihre Anforderungen anpassen können. Wichtig ist mir, dass ich weiß auf welchen Servern meine Funktionen eingebunden sind, sprich die IP. Eine Authentifizierung wäre natürlich das Beste.

3. Natürlich alles mit Delphi, da alle Funktionen bereits in Delphi entwickelt sind

Mir fehlen leider auch die richtigen Suchbegriffe um mich tiefer in das Thema einlesen zu können.

Bis jetzt habe ich einen DataSnap-Rest-Server aufgesetzt. Mit dem kann ich #1 abbilden. Wie komme ich aber mit #2 weiter? Könnte folgender Weg funktionieren:
Andere Webseitenbetreiber die meine Funktionen integrieren wollen bekommen von mir ein php-Script das einen Webservice aufruft das den html code zurückliefert und quasi per echo die Seite ausgibt. Javascript ist ja leider keine Lösung, da ich dann nur weiß welcher Endbenutzer die Funktionen benutzt und nicht über welchen Server er kommt.

Würde mich über Input bzw. die richtigen Schlagworte zur Recherche freuen.

Gruß Philip
Philip
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
56 Beiträge
 
#2

AW: Frage zur Architektur/Technik einer Webanwendung

  Alt 11. Jan 2017, 00:59
Mir fehlen leider auch die richtigen Suchbegriffe um mich tiefer in das Thema einlesen zu können.

Bis jetzt habe ich einen DataSnap-Rest-Server aufgesetzt. Mit dem kann ich #1 abbilden. Wie komme ich aber mit #2 weiter? Könnte folgender Weg funktionieren:
Andere Webseitenbetreiber die meine Funktionen integrieren wollen bekommen von mir ein php-Script das einen Webservice aufruft das den html code zurückliefert und quasi per echo die Seite ausgibt. Javascript ist ja leider keine Lösung, da ich dann nur weiß welcher Endbenutzer die Funktionen benutzt und nicht über welchen Server er kommt.

Würde mich über Input bzw. die richtigen Schlagworte zur Recherche freuen.
Willkommen im Browser Oder anders ausgedrückt: Wie "alt" kann der Zielbrowser sein?
Wenn du Steinzeitbrowser ausschließen kannst, dann kannst du das sehr wohl mit Javascript machen. Stichwort CORS (= Cross Origin Resource Sharing). Im Prinzip funktioniert das sehr einfach (!), da moderne Browser da schon alleine ziemlich entgegenkommend sind.

Ablauf so einer Kommunikation:
  1. fremdeSeite.tld bindet ein javascript ein, das von dir kommt. Dieses File macht asynchron eine Anfrage an deine Seite.
  2. Diese Anfrage wird nicht einfach so vom Browser erlaubt (also deineSeite.tld <> fremdeSeite.tld). Browser schicken da automatisch vor der ersten Anfrage eine so genannte Preflight Message an deineSeite.tld. Das ist eine http OPTIONS Anfrage an deinen Server, indem ein Headerfeld "Origin" auf "https://fremdeSeite.tld" gesetzt ist.
  3. deineSeite.tld antwortet dann mit "Access-Control-Allow-Origin" gesetzt auf "https://fremdeSeite.tld" oder "*" für alle Seiten. Man kann auch auf verschiedene HTTP Methoden beschränken.
  4. Danach weiß der Browser, dass er anfragen darf und schickt die eigentliche asynchrone Request an deinen Server. In diesen Anfragen ist die "Origin" im Headerfeld auch immer auf die Seite gesetzt und man sollte wie oben beschrieben antworten.

mehr Infos zu CORS: klick!

Auf diese Weise musst du nur die API (z.B. als REST Interface) von deiner Seite zur Verfügung stellen und der Fremdbetreiber kann sehr frei gestalten, wie er diese API nutzen möchte.

Willst du auch alte Browser unterstützen, oder wirklich den Fremdserver dazwischenhängen, wird das sicherlich auch gehen. Also um konkret deine Frage zu beantworten: Ja, man kann einfach auch php zur Verfügung stellen.

Das Schöne: Das interessiert dich von der Gestaltung der REST API nicht. Javascript wird die Origin setzen, andere Sprachen (wie auch php) können, diese Header setzen, werden das aber im Allgemeinen nicht automatisch tun. Du wirst niemanden daran hindern können, die für Javascript gedachten Anfragen nicht auch einfach über einen Drittserver anzufragen (ja, es sei denn man schaut eventuell noch die remote IPs reverse an, aber ich glaube das verlässt den Themenbereich deiner Frage).

Weil du CSS angesprochen hattest/an noch anderen Lösungen interessiert bist: Ich kenne die genauen Dinge nicht, die du damit abwickeln willst. Was auch geht: Biete einen Link an, der stark parametrisiert werden kann (z.B.
Code:
https://deineSeite.tld/auth?organisation=fremdeSeite.tld&user=pink_panther&param=....&...blah
)
. Diese Seite soll als Popup oder als iframe von fremdeSeite.tld aufgerufen werden. Du erlaubst, dass man bei dir die Gestaltung anpasst (z.B. welche drei Farben sollen als Seitenhauptfarben verwendet werden, welches Bild soll geladen werden, um das Popup individuell zu branden, etc). Diese Gestaltung integrierst du in dein CSS (das dann halt dynamisch bei dir beim Aufruf der Seite ausgeliefert werden wird; je nach Link-Parametrisierung).

Damit jeder nur seine Daten sieht und du ja hierfür ein Login spendieren möchtest: Http REST ist ja stateless (in der reinen, schönen akademischen Welt ) und das heißt, dass es eigentlich kein Zustand auf dem Server zwischen den Anfragen gehalten werden soll (ja, das ganze wird grade ein wenig aufgeweicht usw).
Aber in der Praxis macht man das normalerweise über tokens. Also login über dein REST interface, wie oben im Javascript Teil beschrieben returned dein token (= irgend ein identifizierender langer geheimer String) der für die Dauer der Sitzung gültig ist (das heißt auch, dass das token am besten irgendwann automatisch auf dem REST Server als ungültig markiert werden muss).
In jeder weiteren Anfrage schickst du dein token mit. Wenn du das zum Beispiel in Cookies ablegst, dann macht die Browser das auch wieder schön automatisch Nur wenn das token gesetzt und gültig ist, gibst du Daten entsprechend der damit assoziierten Berechtigung an den Nutzer heraus.

Server2Server auth brauchst du bei der Javascript Lösung eigentlich nur beim Login. Denk halt daran, dass du bei egal was für einer Lösung darauf achtest, dass Nutzercredentials beim Login immer auf deiner Seite eingegeben werden und nicht auf der Fremdseite. Sonst kann die böse fremdSeite.tld "man-in-the-middle" spielen und die Passwörter deiner Nutzer abgreifen. Ich nehme an, dass die Seite immer nur auf einen Teil der Nutzerdaten eines Nutzers zugreifen können soll...
Wenn du dazu Genaueres wissen möchtest, kann ichs gerne weiter ausführen, wie die Anfragereihenfolge mit den drei Parteien Fremdserver, Server, Browser sicher möglichst sicher ablaufen könnte.

Ich hoffe, ich konnte ein wenig Hintergrund schaffen!

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!

Geändert von BrightAngel (11. Jan 2017 um 02:06 Uhr)
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.009 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Frage zur Architektur/Technik einer Webanwendung

  Alt 11. Jan 2017, 07:54
Hi Brighty,

top, vielen lieben Dank für deine Antwort. Jetzt komm ich erstmal weiter!
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.504 Beiträge
 
#4

AW: Frage zur Architektur/Technik einer Webanwendung

  Alt 11. Jan 2017, 11:33
Als Ergänzung zur Antwort oben:

Das Token wird üblicherweise über einen sogenannten STS (Security Token Service) ausgestellt, und in der Web-Welt werden hierfür dann sogenannte JWT (JSON Web Tokens) verwendet.
Infos zu JWT's findest Du hier: http://jwt.io/

Welcher Nutzer es ist, wird in sogenannten 'Claims' in das Token geschrieben, und kann dann vom Programm ausgewertet werden.
So ein JWT kann auch mit einer Ablaufzeit versehen werden.

Damit Dir niemand ein gefälschtes/verändertes Token unterjubelt können die JWTs signiert werden, so kann Dein Programm durch prüfen der Signatur sicherstellen, dass das Token auch nicht manipuliert wurde, und kann sich auf die Angaben in dem Token verlassen.
Sebastian P.R. Gingter
不死鳥 Visit my Blog.
Do not argue with an idiot. They lower you to their level and then try to beat you with experience.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf