2016-03-22 13 views
1

Ich arbeite an einem Datasnap-Server mit mehreren ServerMethods-Klassen. Diese werden dann wie üblich über HTTP/S usw. über TDSHTTPService verfügbar gemacht. Ich versuche nun, eine eindeutige Authentifizierung zu implementieren, die für jeden Dienstbereich/Kontext/Bereich geeignet ist. Dies scheint so zu sein, als ob es möglich wäre, den Parameter "Context" im Ereignis "Datasnap TDSAuthenticationManager OnUserAuthenticate" zu verwenden, um die verwendete Authentifizierungsprüfung zu variieren. Allerdings laufe ich Probleme:Delphi 10 Seattle Datasnap via HTTP: Korrekte Verwendung von Kontext in TDSAuthenticationManager.OnUserAuthenticate?

Was ich versucht habe:

1) Changed den Client-Seite TSQLConnection.Driver.DatasnapContext von "DataSnap" auf "datasnaptest", und änderte die entsprechende Server-Seite TDSHTTPService.DSContext von "datasnap /" zu "datasnaptest /". Der Versuch, eine Verbindung herzustellen, ist erfolgreich, aber im OnUserAuthenticate-Ereignis ist der Parameter "Context" leer. Als Konsequenz habe ich folgendes versucht:

2) Changed der Client-Seite TSQLConnection.Driver.DatasnapContext von "datasnap" zu z. "datasnap/test" und änderte die entsprechende Serverseite TDSHTTPService.DSContext von "datasnap /" in "datasnap/test /". Der Versuch, eine Verbindung herzustellen, schlägt mit 'HTTP/1.1 404 Expected data sap context in request/data nap/test/tunnel' fehl.

3) kehrte die TSQLConnection.Driver.DatasnapContext und verändert dann die Client-Seite TSQLConnection.Driver.URLPath von „“ zu „Test“ und verändert entsprechend die Serverseite TDSHTTPService.DSContext zu ‚Test/DataSnap /‘. Der Versuch, eine ähnliche Verbindung herzustellen, schlägt mit 'HTTP/1.1 404 Expected datasnap context in request/test/datasnap/tunnel' fehl.

Kurz: Wie kann man richtig verschiedene Authentifizierungen verwalten (bezogen auf verschiedene/mehrere Serverklassen und damit unter verschiedenen URLs/Realms von HTTP ausgesetzt) ​​in einem Server Seattle DataSnap Delphi 10?

Futher Hintergrund: Wir haben mehr App-Server und Web-Service/Schnittstellen (WebBroker/SOAP und alte Schule DataSnap), die wir vereinigen wollen/Modernisierung unter dem neuen Stil DataSnap Rahmen.

Antwort

0

Es kann sein, dass Sie den 'datasnap' Kontext nicht ändern können (oder sollten). Es kann sein, dass der Kontextparameter für den OnUserAuthenticate-Ereignishandler nicht so verwendet werden sollte.

jedoch:

Es scheint mir, Sie sehr gut ohne durch die Verwendung von benutzerdefinierten Attributen auszukommen können, und autorisiert und verweigert Rollen.

Werfen Sie einen Blick auf Bob Swart Tutorial-Videos (und White Paper), speziell DataSnap in Action 2 - DataSnap Server Security Diese Sie auf dem richtigen Weg erhalten wird, sofern die Authentifizierung und Autorisierung betroffen ist.

+0

Vielen Dank für Ihren Versuch zu helfen. Mein Hauptproblem besteht jedoch darin, dass der Kontext (geändert oder nicht) nicht an die OnUserAuthenticate() -Methode übergeben wird. Der Wert ist immer leer. Dies scheint mir ein Fehler zu sein. Warum hätten Sie den Parameter, wenn er nicht verwendet werden soll? Denken Sie daran, dass verschiedene Bereiche der Site unterschiedlichen Authentifizierungsbereichen/Kontexten entsprechen. Daher müssen Sie ohne Kontext auf die Überprüfung von Benutzer/Pass gegen jeden möglichen Bereich/Kontext in Ihrer Site zurückgreifen. Nicht offensichtlich wünschenswert. –

+0

Wenn die Kontextvariable leer ist (ich überprüfe/verwende sie nicht in meinen eigenen Apps), dann denke ich, dass es eine unvollständige Implementierung von EMBT ist und Sie sollten einen Fehlerbericht auf dem Quality Portal einreichen. – nolaspeaker

Verwandte Themen