2009-07-07 5 views
0

Ich habe eine webbasierte Anwendung, die es einem Benutzer ermöglicht, ihre DNS auf meine IP zu verweisen, und meine App wird ihren Inhalt basierend auf dem Domänennamen im HTTP-Host-Header bereitstellen. Ich sollte darauf hinweisen, dass dies durch die Anwendung erfolgt, nicht durch den eigentlichen HTTP-Server (Apache), es ist eine umbenannte App Art der Sache. Das Problem, das ich habe, ist, dass ich möchte, dass sich die Benutzer über ein Formular auf der betreuten Seite anmelden können und irgendwie in der Domäne des Benutzers bleiben. Dies ist einfach, es sei denn, Sie möchten Sicherheit. Ich müsste für jede Domain ein SSL-Zertifikat installiert haben, um dies zu erreichen. Momentan kann ich es tun, indem ich das Formular an eine Domain mit einem installierten SSL-Zertifikat sende, aber aufgrund der Browser-Sicherheit kann ich die erforderlichen Cookies nicht exakt auf der ursprünglichen Domain einstellen.Wie sichere Anmeldung über mehrere Domänen zu ermöglichen

Kennt jemand einen Weg, wie ich sicher Benutzer über die App anmelden kann, die keine Installation von vielen SSL-Zertifikate beinhaltet. Ich kann mir einige verworrene Wege über Umleitungen oder andere Mechanismen vorstellen, aber es ist nicht so sauber. Es macht mir nichts aus, einreichen auf die sichere URL und eine Weiterleitung, es ist nur Einstellung der Cookie kann nicht getan werden.

Antwort

2

Ein häufiger Trick besteht darin, Daten in der URL zu übergeben. Facebook Connect does this. Sie können von einer Domäne zur anderen mit einem Sitzungstoken in der URL umleiten und dann das Token überprüfen (möglicherweise in ein Cookie konvertieren), wenn die Anfrage in der anderen Domäne eingeht. Edit: die MSDN article, dass Facebook Links zu mehr Details hat.

3

ich dies getan habe, bevor das folgende Verfahren unter Verwendung ...

Auth Schlüssel erstellen auf dem Server 1.

create_auth_key 
    expires = time + expire_time 
    data = username + '|' + password + expires 
    secret = 'my secret key' 
    hash = md5(data + secret) 
    key = base64(data) + hash 

Auf zwei Server übergeben Sie das neu erstellte authkey

valid_auth_key(key) 
    hash = key[-hash_size:] 
    b64data = key[:-hash_size] 
    data = base64decode(b64data) 
    data_hash = md5(data + secret) 
    if data_hash != hash: 
     return false # invalid hash 
    data_parts = data.split('|') 
    user = data_parts[0] 
    password = data_parts[1] 
    expires = data_parts[2] 
    if now > expires: 
     return false # url expired 
    return true 

Es ist schnell und dreckig, aber es basiert nur auf einfachen Daten, die per URL übermittelt werden. Der Nachteil ist, dass eine bestimmte URL genügt, um sich einzuloggen, und jemand könnte diese URL für eine bestimmte Zeit teilen. Sie müssen auch sicherstellen, dass Ihre Ablaufzeit nicht größer ist als der Zeitunterschied zwischen den Servern.

Verwandte Themen