Authentifizierung mit einem JavaScript-Client

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu DataSnap-REST


Wenn Sie einen Client schreiben, der den erzeugten JavaScript-Proxy zum Aufrufen von Servermethoden auf einem Server mit einer konfigurierten TDSAuthenticationManager-Komponente verwendet, müssen Sie evtl. (abhängig davon, ob die Implementierung von OnUserAuthenticate und OnUserAuthorize die Werte für Benutzer und Passwort berücksichtigt) Ihre Anmeldeinformationen an den Konstruktor des JavaScript-Proxy übergeben. Dazu müssen Sie zunächst eine Referenz auf die Datei base64.js in Ihre Webseite einfügen. Diese Datei wäre in Ihr Projekt einbezogen, wenn Sie den Experten für REST-Anwendungen verwendet hätten. Diese Datei befindet sich auch im Unterverzeichnis "dsrest" des RAD Studio-Installationsverzeichnisses.

<script type="text/javascript" src="js/base64.js"></script>

Danach ändern Sie die Instanz der Proxy-Klasse, indem Sie diese neue Konstruktoreingabe einfügen:

var Proxy = new TServerMethods1(getAuth(USERNAME,PASSWORD));

Die Funktion 'getAuth' codiert anhand der Datei base64.js den Benutzernamen und das Passwort in dem erforderlichen Format. USERNAME und PASSWORD sollten durch die tatsächlichen Werte ersetzt werden, die dann auf verschiedene Weise gefüllt werden können, z.B. durch Erstellen eines Formulars und dann die Übernahme der Werte daraus:

<html> 
<head> 
<title>Authentication/Authorization Example</title>
<script type="text/javascript" src="base64.js"></script> 
<script type="text/javascript" src="json-min.js"></script> 
<script type="text/javascript" src="ServerFunctionExecutor.js"></script>
<script type="text/javascript" src="ServerFunctions.js"></script>
<script type="text/javascript">
  function doEcho()
  {
    var userName = document.getElementById("namefield"); //get the user name from the form
    var password = document.getElementById("passwordfield"); //get the password from the form

    //create the proxy instance with the specified user credentials
    var Proxy = new TServerMethods1(getAuth(userName, password));
    var Response = Proxy.EchoString("Hello World");
    
     //Will show an error message if authorization failed,
    //or the JSON Object of parameters if successful
    alert(Response.toJSONString());
  }
</script> 
</head> 
<body> 
  <form onsubmit="doEcho(); return false;">
    <input id="namefield" type="text"/><br />
    <input id="passwordfield" type="text"/><br />
    <input id="runButton" type="submit" value="INVOKE" />
  </form>
</body> 
</html>

Beachten Sie bitte, dass alle erstellten Proxy-Klasseninstanzen und auch jegliche direkte oder indirekte Verwendung des ServerFunctionExecutor.js-Codes dieselbe Sitzungs-ID verwenden. Das bedeutet, dass wenn eine einzelne Servermethode aufgerufen wurde, dieselbe Sitzungs-ID für alle künftigen Aufrufe aus dem AJAX-Client verwendet wird, bis diese Sitzung abläuft. Da die Authentifizierung nur einmal ausgeführt wird und der übergebene Benutzername und das übergebene Passwort nach der erfolgreichen Authentifizierung ignoriert werden, werden alle Änderungen des Benutzernamens oder des Passwortes so lange ignoriert, bis Sie eine neue Sitzung beginnen.

Siehe auch