Frage

Ich versuche, eine einfache Single Sign On-Szenario zu implementieren, wo einige der beteiligten Server werden Windows (IIS) Boxen sein. Es sieht aus wie SPNEGO ein vernünftiger Weg dafür ist.

Hier ist das Szenario:

  • Benutzer meldet sich mein SSO-Dienst seinen Benutzernamen und Passwort. Ich authentifizieren ihm einen Mechanismus verwenden.
  • Zu einem späteren Zeitpunkt der Benutzer wünscht App A. zugreifen
    • Die Anforderung des Benutzers für App A wird durch den SSO-Dienst abgefangen. Der SSO-Dienst verwendet SPNEGO den Benutzer bei App A zu protokollieren:
      • Der SSO-Dienst schlägt die App einer Web-Seite, wird ein "WWW-Authenticate: Verhandeln" Antwort
      • Der SSO-Dienst generiert eine „Authorization: xxx Verhandeln“ Antwort im Namen des Benutzers Der Benutzer reagiert auf App A. jetzt um App A angemeldet ist
      • .
    • Die SSO-Dienst fängt nachfolgenden Benutzeranforderungen für App A, den Authorization-Header in sie einfügen, bevor sie an App A vorbei.

Klingt das richtig?

Ich brauche zwei Dinge (zumindest die ich mir vorstellen kann jetzt):

  • die Möglichkeit, die „Authorization: xxx Verhandeln“ zu erzeugen Token im Namen des Benutzers, vorzugsweise unter Verwendung von Python
  • die Fähigkeit zur Validierung "Authorization: Verhandeln xxx" Header in Python (für einen späteren Teil des Projektes)
War es hilfreich?

Lösung

Das ist genau das, was Apple mit seinem Calendar Server rel="nofollow. Sie haben eine Python gssapi Bibliothek für den kerberos Teil des Prozesses, um SPNEGO .

Schauen Sie in Calendar / twistedcaldav / authkerb.py für den Server-Auth Teil. Das Kerberos-Modul (das ist ein C-Modul ist), hat keine nützlichen Docstrings, aber PyKerberos / pysrc / kerberos.py hat alle Funktionsdefinitionen.

Hier ist die URLs für die SVN-Stämme:
http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk
http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk

Andere Tipps

Werfen Sie einen Blick auf die http://spnego.sourceforge.net/credential_delegation.html Tutorial. Es scheint zu tun, was Sie zu tun versuchen.

Ich habe einige Zeit für etwas ähnliches gesucht (unter Linux), die mehrmals auf dieser Seite führt mich hat, noch keine Antwort geben. So, hier ist meine Lösung, ich kam mit:

Der Web-Server ist ein Apache mit mod_auth_kerb. Es läuft bereits in einem Active Directory, Single Sign-On-Setup seit geraumer Zeit. Was konnte ich bereits viel tun, vor:

  • Verwenden von Chrom mit Single Sign-On auf Linux (mit einem richtigen krb5-Setup, mit arbeitender kinit user @ domain)
  • Mit Python verbinden und Single Sign-On sspi vom pywin32 Paket verwenden, mit so etwas wie sspi.ClientAuth("Negotiate", targetspn="http/%s" % host)

Der folgende Codeausschnitt vervollständigt das Puzzle (und meine Bedürfnisse), auf mit Kerberos auf Linux Python Single-Sign mit (mit Python-gssapi):

in_token=base64.b64decode(neg_value)
service_name = gssapi.Name("HTTP@%s" % host, gssapi.C_NT_HOSTBASED_SERVICE)
spnegoMechOid = gssapi.oids.OID.mech_from_string("1.3.6.1.5.5.2")
ctx = gssapi.InitContext(service_name,mech_type=spnegoMechOid)
out_token = ctx.step(in_token)
buffer = sspi.AuthenticationBuffer()
outStr = base64.b64encode(out_token)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top