Shibboleth Single-Sign-On integriert

3 views
Skip to first unread message

phoque

unread,
Oct 5, 2009, 6:02:22 AM10/5/09
to Antville developer's mailing-list
Hi Antville developers,

ich habe für unsere Antville installation Shibboleth Single-Sign-On in
Antville integriert. Es waren ziemlich wenig Änderungen dazu nötig:

Die Hauptaufgabe des Logins übernimmt mod_shib, der anonymous Anfragen
an geschützte Verzeichnisse (im Fall von antville ist es /members)
abfängt, den User zum SSO Identity Provider weiterleitet und
anschließend die Berechtigung von diesem empfängt. Ist der User
angemeldet, injiziert mod_shib (in unserem Fall) die Header "uid" und
"mail", wenn die beiden gesetzt sind, ist der Benutzer eingeloggt:

User/User.js:186

User.autoLogin = function() {
//if (session.user) {
// return;
//}

var u;
var name=req.getHeader('uid');

if(name && name.length>0) {
u = root.users.get(name);
if(!u) {
u = app.registerUser(name, ("foo"+(Math.random()*10000)).md5
() );
if (!u) throw new Exception("memberExisting");
u.email = req.getHeader('mail');
u.publishemail = false;
u.registered = new Date();
u.blocked = 0;
u.status = User.REGULAR;
}
session.login(u);
u.touch();
//u.lastVist=new Date();
res.message = gettext('Welcome to "{0}", {1}. Have fun!',
res.handlers.site.title, u.name);
return;
}


//var name = req.cookies[User.COOKIE];
//var hash = req.cookies[User.HASHCOOKIE];
//if (!name || !hash) {
// return;
//}
//var user = User.getByName(name);
//if (!user) {
// return;
//}
//var ip = req.data.http_remotehost.clip(getProperty("cookieLevel",
"4"),
// "", "\\.");
//if ((user.hash + ip).md5() !== hash) {
// return;
//}
//session.login(user);
//user.touch();
//res.message = gettext('Welcome to "{0}", {1}. Have fun!',
// res.handlers.site.title, user.name);
//return;
}

Ich musste beim aufruf des Login-Formulars von antville noch abfangen,
ob der Benutzer bereits eingeloggt ist und ihn dann dementsprechend
weiterleiten. Diese änderung sollte nicht mit dem normalen Login-
verhalten kollidieren.

Members/Members.js:153

Members.prototype.login_action = function() {
if(session) {
res.redirect(User.getLocation() || this._parent.href());
}
if (req.postParams.login) {
try {
var user = User.login(req.postParams);
res.message = gettext('Welcome to "{0}", {1}. Have fun!',
res.handlers.site.getTitle(), user.name);
res.redirect(User.getLocation() || this._parent.href());
} catch (ex) {
res.message = ex;
}
}
session.data.token = User.getSalt();
res.data.action = this.href(req.action);
res.data.title = gettext("Login to {0}", this._parent.title);
res.data.body = this.renderSkinAsString("$Members#login");
this._parent.renderSkin("Site#page");
return;
}

Beim Logout logge ich den Benutzer aus und leite ihn an Shibboleth
Logout weiter

Members/Members.js:175

Members.prototype.logout_action = function() {
if (session.user) {
res.message = gettext("Good bye, {0}! Lookin' forward to seeing
you again!",
session.user.name);
User.logout();
res.redirect("https://mein-server/Shibboleth.sso/Logout");
}
res.redirect(this._parent.href());
return;
}

Da die Änderungen "so einfach" waren sollten sie sich relativ einfach
in Antville integrieren lassen, sodass Antville von Haus aus
Shibboleth-Unterstützung mitbringen kann. Was haltet ihr davon?

Gruß, Nils

tobi

unread,
Oct 7, 2009, 5:03:32 AM10/7/09
to Antville developer's mailing-list
Hallo Nils

Ich habe gestern mit Philipp gesprochen, der sich mit mir zur Zeit
zusammen um den Antville Code kümmert.

Wir finden ein Single Sign On Feature für Antville gut. Philipp hat
mir berichtet, dass die erforderliche Registrierung manche User vom
Kommentieren abhält. Und es gab auch von BenutzerInnnenseite schon
Interesse für so eine Möglichkeit.

Allerdings halten wir es nicht für ausreichend, einzig auf den
Shibboleth Service zu setzen. Mit Facebook Connect, Google, OpenID
(...) wären da noch einige Kandidaten, die durchaus auch unterstützt
werden sollten.

Daher sollte der Ansatz insofern erweitert werden, dass Deine
Shibboleth Anbindung als eine von mehreren Optionen ausgwählt werden
kann.

D.h. zuerst wären Fragen zu klären, wie und wo ein User sich den SSO
Service auswählen kann bzw. welche Schnittstellen für die Anbindung
nötig sind.

Nur so können wir eine Modularisierung erreichen, die einfach
Voraussetzung ist, wenn solche Erweiterungen implementiert werden
sollen.

Würde uns sehr freuen, wenn Du Dich dieser Aufgabe weiter annehmen
wolltest. Ich wäre dann sehr zuversichtlich, dass wir Deine
Erweiterung implementieren können.

Übrigens: wenn Du Änderungen am Code einfach als Patch/es
übermittelst, wird das die Code Review um einiges erleichtern. Die
Methode hat sich einfach bewährt.

Ciao,
tobi

Nils W

unread,
Oct 9, 2009, 3:57:52 AM10/9/09
to Antville developer's mailing-list
Hallo Tobi,

das klingt gut!

Facebook, Google, Live etc. bieten alle OpenID an, daher wäre das wohl
der kleinste gemeinsame Nenner für diese Dienste.
Leider scheint mod_auth_openid nicht ganz so flexibel zu sein wie
mod_shib, ich werde mir das ganze aber mal genauer ansehen.

Das mit dem Codeschnipsel war nur als Unterstreichung für: "Hey, so
einfach geht das". Der Code ist noch lange nicht lauffähig und auch
nicht sehr sauber integriert. :-)

Gruß, Nils
Reply all
Reply to author
Forward
0 new messages