Das Online-Übungssystem bietet einen HTTP-Proxy-Service mit folgenden Eigenschaften:
D.h. es können HTTP-Requests, die eigentlich von einem Übungssystem-externen (FernUni-)Server bearbeitet werden sollen, durchs Übungssystem durchgeschleift werden, wobei das Übungssystem zunächst eine Authentifizierung des Aufrufers durchführt und den Request nur bei erfolgreicher Autorisierungsprüfung an den externen Server weiterleitet.
Haupteinsatzzweck ist also die Ausnutzung der bereits im Online-Übungssystem bestehenden Autorisierungfunktionalität für externe Dienste, die sich auf diese Weise nicht selbst um die Autorisierung ihrer Nutzer kümmern müssen. Damit externe Aufrufer diese Autorisierungsprüfung nicht einfach umgehen können, indem sie den Zielserver direkt statt übers Übungssystem ansprechen, sieht der typische Anwendungsfall vor, dass der anzusprechende Server nur innerhalb des FernUni-Netzwerkes und nicht direkt aus dem Internet erreichbar ist (z.B. durch Firewall-Regeln).
Zusätzlich übermittelt das Übungssystem noch Informationen über den authentifizierten Nutzer (Username oder Matrikelnummer) sowie den Autorisierungskontext (Übungssystem-Kurs, den der angemeldete Benutzer belegt hat bzw. betreut oder dessen Einsendearbeiten er korrigiert) an das Zielsystem, die dieses bei Bedarf berücksichtigen kann.
Ein möglicher Anwendungsfall dieses Proxys lässt sich wie folgt skizzieren:
In diesem Beispiel kann der Übungssystem-Autorisierungs-Proxy im „Studenten-Modus“ zum Einsatz kommen:
Mit Vorkorrekturmodulen gibt es bereits einen Mechanismus, über den externe Software an das Online-Übungssystem angebunden werden kann. Die Anwendung von Vorkorrekturmodulen unterscheidet sich jedoch erheblich von der dieses Proxys:
Vorkorrekturmodule sind nicht mit Blick auf interaktive Aufgabenbearbeitung in mehreren Schritten ausgelegt worden, sondern ihr primäres Einsatzgebiet ist das Feedback nach einer in gewissem Sinne „fertigen“ Einsendung. Durch Speicherung der Vorkorrekturen sind die Ergebnisse auch nicht „flüchtig“, sondern können auch später im Rahmen einer Korrektur immer wieder eingesehen werden (vom Studenten oder auch von einem menschlichen Korrektor, der eine endgültige Korrektur und Bewertung vornehmen soll).
Man kann zwar Vorkorrekturmodule auch für Ajax-Requests wie oben skizziert „zweckentfremden“, das birgt aber gegenüber der Proxy-Lösung einige potentielle Nachteile. Insbesondere ist deutlich höherer Zeitbedarf für die Requestbearbeitung einzukalkulieren, bedingt durch Datenbankzugriffe, Bildung und Ausführung eines SOAP-Requests, Ausfüllen einer Korrektuschablone etc. Die Speicherung der Daten kann andererseits in gewissen Anwendungsfällen vielleicht auch ein Vorteil sein, weil so bei Unterbrechen einer interaktiven Aufgabenbearbeitung und später erneutem Aufruf ggf. ein Wiedereinstieg beim letzten Bearbeitungsschritt realisierbar ist.
Ist eine Speicherung der Teileinsendungen dagegen nicht nötig, ist die Verwendung des Proxys einfacher und schneller. Weiterhin erschließt der Proxy zusätzliche Einsatzbereiche, indem sein Autorisierungsmechanismus nicht auf Studenten/Kursbeleger eingeschränkt ist, sondern alternativ auch für Korrektoren oder Betreuer eines Übungssystem-Kurses eingesetzt werden kann. So wäre z.B. die Nutzung bestimmter Serveranwendungen für Korrektoren zu deren Unterstützung bei der Aufgabenkorrektur denkbar.
132.176.*
| *.fernuni-hagen.de
| *.feu.de
) anzusprechen. Er kann nicht als Proxy zum Zugriff auf externe Server genutzt werden.
/images/test.png
oder /styles/main.css
) anfordern, so würde der Browser daraus Requests wie https://online-uebungssystem.fernuni-hagen.de/images/test.png
generieren, die natürlich nicht über den Proxy abgewickelt würden, sondern in aller Regel schlicht fehlschlügen (404: Not found) oder falsche Daten lieferten.Im Unterschied zu „gewöhnlichen“ HTTP-Proxy-Servern ist hier kein Request mit Original-URL lediglich an eine IP eines Proxy-Servers zu senden, sondern zunächst ein regulärer Requests ans Online-Übungssystem zu stellen, mit einem übungssystemspezifischen URL, aus dem die für die Autorisierungprüfung benötigten Informationen entnommen werden. Der Ziel-URL ist dem Übungssystem zusätzlich zu übermitteln. Der Request wird dann (leicht modifiziert) an den Zielserver weitergeleitet, sofern die Autorisierungsprüfung zuvor erfolgreich war.
Der URL hat zunächst den Standard-Aufbau von URLs im Kurskontext mit einem speziellen Servicenamen und dem Schlüssel (Veranstaltername, Kursnummer, Versionsnummer/Semester) des Kurses, für den die Autorisierungsprüfung vorgenommen werden soll. Aus dem Servicenamen geht weiterhin die Art der Autorisierungsprüfung hervor (d.h. ob der Aufrufer ein Beleger, Korrektor oder Betreuer des Kurses sein muss, um den Dienst aufrufen zu dürfen). Der Ziel-URL, an den der Request weiterzuleiten ist, wird als Suffix an den URL angehängt.
Der URL hat also folgenden Aufbau (in RegEx-Syntax2):
https://online-uebungssystem.fernuni-hagen.de⤦
/<veranstaltername>/(Student|Betreuer|Korrektor)?AuthProxy/<kursnr>/<versionsnr>⤦
/https?://<Ziel-Domain>:(<Port>)?(/<Path>)?(\?<QueryString>)?
Die Abschnitte in spitzen Klammern sind Platzhalter, die mit konkreten Werten zu füllen sind:
veranstaltername
, kursnr
und versionsnr
identifizieren den Kurs, für den die Autorisierung verlangt wird.Student
, Betreuer
oder Korrektor
) legt fest, was für ein Login-Typ erwartet wird.
Student
schließt dabei auch Teststudenten und Mentoren mit ein.Student
. D.h. an Stelle von StudentAuthProxy
kann auch kurz der Servicename AuthProxy
verwendet werden.WS14
) folgt, durch Slash getrennt, der vom Proxy anzusprechende Target-URL.
http://
oder https://
beginnen,fernuni-hagen.de
- oder feu.de
-Domain oder alternativ eine IP-Adresse aus dem FernUni-Netz.https://online-uebungssystem.fernuni-hagen.de/six/AuthProxy/01613/WS10/http://abc.fernuni-hagen.de/?q=test
https://online-uebungssystem.fernuni-hagen.de/six/BetreuerAuthProxy/01613/WS10/https://xyz.feu.de:50101/some/path
Unterstützt werden derzeit lediglich GET
, POST
und PUT
.3
Die Anfrage muss – wie alle Anfragen ans Online-Übungssystem – einen Authorization-Header für Basic-Authentication (aka HTTP-Auth) enthalten, andernfalls lehnt das Übungssystem die Anfrage mit Response Code 401 (Unauthorized) ab.
(Aufbau des Headers: Authorization: Basic <base64(username:password)>
)
Nur wenn die so übergebenen Credentials einen Studenten, Korrektor bzw. Betreuer authentifizieren und dieser zum Zugriff auf den Kurs autorisiert ist, wird die Anfrage an die Remote-URL weitergeleitet, andernfalls antwortet der Übungssystem-Server entweder mit 401 oder 403 (abhängig davon, ob eine neue Passworteingabe angefordert werden soll oder ob die Credentials zwar einen User authentifizieren, dieser aber keine Autorisierung hat).
Der Authorization
-Header wird nicht ans Zielsystem weitergeleitet, sondern vom Übungssystem aus dem Request entfernt.
Statt des Authorization-Headers werden neue, nicht im HTTP-Standard definierte Header in den Request ans Zielsystem eingebunden:
X-Username
: Loginname des authentifizierten Benutzers. Bei Betreuern und Korrektoren ist dies immer der vollständige Loginname. Bei Studenten wird in der Regel ein Name der Art q
+Matrikelnummer ausgegeben, wenn es sich um einen normalen Studenten handelt. Bei Mentoren oder Teststudenten wird direkt der lokale Loginname (z.B. 7777777
für den typischen Teststudenten mit Sonderrechten) ausgegeben.X-Matrikelnr
: Dieser Header wird nur für Studenten-Accounts ausgegeben und enthält die (rein numerische) Matrikelnummer des Studenten. (Es wird nicht sichergestellt, dass es sich um einen echten FernUni-Studenten handelt, auch für Teststudenten kann dieser Header ausgegeben werden, wenn diese einen nur aus Ziffern bestehenden Loginnamen verwenden, nicht dagegen z.B. für Mentoren mit nicht-numerischem Benutzernamen.)X-Veranstaltername
, X-Kursnr
und X-Versionsnr
enthalten den Kursschlüssel aus dem URL des Original-Requests ans Online-Übungssystem, s.o.Die meisten Header werden ansonsten 1:1 ans Zielsystem weitergereicht, nur „Hop-by-Hop“-Header4 werden ausgefiltert. Außerdem wird natürlich der Host-Header ausgetauscht gegen den Domainnamen (bzw. die IP) aus dem Target-URL.
Der Message Body sowohl von Requests (POST oder PUT) als auch von Responses (alle Methods) wird unverändert übertragen, also insbesondere vom Übungssystem weder interpretiert noch manipuliert.
Bei Bedarf ließe sich ggf. eine Erweiterung implementieren, nach welcher bei Vorliegen von gesonderten Proxy-Authorization-Headern zusätzlich zu „normalen“ Authorization-Headern im Request das Übungssystem nur die Proxy-Authorization auswertet und Authorization-Header dann ans Zielsystem weiterleitet. ↩
Syntax regulärer Ausdrücke. Insbesondere steht \?
für ein Fragezeichen im URL, während ?
anzeigt, dass das vorhergehende einzelne Zeichen bzw. der Inhalt der vorhergehenden Klammern optional ist. Ein Pipe (|
) ist ein Oder-Operator, Trennzeichen für eine Aufzählung von Alternativen (i.d.R. ebenfalls in runden Klammern). ↩
Bei Bedarf lässt sich ggf. der Support auch für andere Methoden wie insb. DELETE
nachrüsten. ↩
Header, die laut HTTP/1.1-Standard nur an den nächsten, direkt angesprochenen Host übermittelt und insb. von Proxies nicht weitergeleitet werden. Siehe RFC2616 Sec. 13.5.1 ↩