Ajax mit HTTP Basic Auth (YUI)

Für eine Adobe AIR Anwendung an der ich grade arbeite verlangt die Server- Schnittstelle eine Authentifizierung per HTTP Basic Auth. Klar ist ein Basic Auth nicht immer die erste Wahl beim Einsatz von Ajax, aber eine Authentifizierung über Cookies und Sessions zu implementieren, wenn die Anwendung eigentlich nur einen einzigen Aufruf tätigt ist zu viel des Guten.

Was die Sicherheit angeht, sollte der Aufruf des Servers über HTTPS, also SSL verschlüsselt, erfolgen, denn sonst könnte das Passwort mitgelesen werden. Hat man diese Voraussetzung erfüllt macht ein HTTP Basic Auth eigentlich schon Sinn, wenigstens für diesen Anwendungsfall.

Eine (etwas zu kurze) Recherche hat gezeigt, dass eigentlich kein JavaScript Framework mit Ajax Funktionalität eine simple Möglichkeit bietet mit HTTP Authentifizierung zu arbeiten. Deshalb hier mal ein kleines Beispiel, wie man XHR (XmlHttpRequest) Aufrufe mit der YUI Bibliothek mit HTTP Basic Auth realisieren kann.

YAHOO.util.Connect.initHeader(
    'Authorization',
    build_auth_header('username', 'password')
)
var resp = YAHOO.util.Connect.asyncRequest(
                    'POST',
                    'http://example.com/api/submit/',
                    ajaxCallback,
                    postdata
            )

Die Funktion build_auth_header() erzeugt durch Base64 codierung aus Username und Passwort die Daten für einen HTTP kompatiblen Authorization-Header und sieht wie folgt aus:

build_auth_header: function(user, password) {
    var tok = user + ':' + password;
    var hash = Base64.encode(tok);
    return "Basic " + hash;
}

Die Funktion benutzt die encode Methode aus der Base64 Klasse vom Webtoolkit, diese Datei muss man vor dem Code auf seiner Seite einbinden.

Inspiriert durch ein ExtJS Beispiel auf Coder's Eye.

Veröffentlicht von Arne Brodowski am 24. Okt. 2007, 10:32 in , , , , , , .

Kommentare