2.2. HTTP-Protokolle

Die Protokolle XML-RPC und JSON-RPC verwenden als Übertragungsprotokoll HTTP bzw. HTTPS. Ob eine SSL-Verschlüsselung verwendet wird oder nicht, hängt von den Einstellungen im GREYHOUND Admin ab.
Für die Authentifizierung via HTTP wird die bekannte HTTP-Authentifizierung (Basic Authentication) verwendet. Allerdings wird der Benutzername in der Authentifizierung um eine sogenannte Client-ID erweitert. Die Client-ID hält mehrere Verbindungen eines Clients in einer Einheit zusammen. Sie bildet im Prinzip die aus Webapplikationen bekannte Session-ID und ist auch ähnlich aufgebaut. Alle Verbindungen mit derselben Client-ID haben einen gemeinsamen Pool für das Sperren von Elementen. Will man also eine eigene Anwendung schreiben, welche auf den GREYHOUND zugreifen soll, dann muss für jede Instanz des Programms eine eigene Client-ID generiert werden, welche für die gesamte Programmlaufzeit eindeutig ist. Die Client-ID ist eine md5hash-Summe eines beliebigen, möglichst zufälligen Wertes. Eine schlechte Client-ID wäre zum Beispiel auf Basis der aktuellen Uhrzeit generiert (ein Client welcher sich zur selben Zeit verbinden würde, hätte die gleiche Client-ID). Eine gute Client-ID würde auf Basis der Uhrzeit und einer Zufallszahl generiert. Hier ein Beispiel in Pseudo-Code:
Quelltext-Beispiel:
1
ClientID = Md5Sum(ConvertToString(CurrentMicroDateAndTime) + ConvertToString(Random(1, MaxInt)));
Die generierte Client-ID wird mit dem Benutzernamen (getrennt durch ein Minuszeichen) für die Authentifizierung zusammengesetzt, der Benutzername könnte also lauten:
Quelltext-Beispiel:
1
2
Username = ClientID + '-og'; // z.B. e4d909c290d0fb1ca068ffaddf22cbd0-og
Password = 'myGREYHOUNDpassword';
Der Benutzername und das Passwort werden nun in per HTTP-Authentifizierung übergeben. Nochmal zur Sicherheit: Die Client-ID sollte bei sämtlichen Verbindungen aus derselben Programminstanz dieselbe sein, sich in unterschiedlichen Programminstanzen aber unterscheiden (auch wenn diese zur selben Zeit erstellt werden).
Bei einem erneuten Login, muss jeweils eine neue Client-ID generiert werden. Diese soll also nicht wieder verwendet werden. Eine Client-ID sollte wie eine Session-ID betrachtet werden, welche vom Client verwaltet wird.
Themen dieser Ebene
2.1. RPCP
2.2. HTTP-Protokolle