Hilfe - Suche - Mitglieder - Kalender
Vollansicht: Plugin: OpenID v01.00.00
Forum Sefrengo.org > Downloads > Alpha, Beta ... Vorabversionen
STam
Pluginname:
---------------------------------------------------------------------------
OpenID(-Login)

Status:
---------------------------------------------------------------------------
beta - das Plugin ist weitgehend fertig und getestet. Bis zu einer stabilen
Version wird es nur noch kleinere Änderungen / Bugfixes geben. Das
Plugin ist unter Vorbehalt produktiv einsetzbar.

Beschreibung:
---------------------------------------------------------------------------
OpenID(-Login) ermöglicht einen Frontend-Login über ein dezentrales System zur Identifizierung.
Das zugrundeliegende Protokoll wurde von Brad Fitzpatrick,
dem Gründer von LiveJournal, entwickelt. Die Idee ist, dass Benutzer,
welche ein Benutzerkonto bei einem OpenID-Server haben,
sich mit diesem auf beliebigen OpenID-unterstützten Webseiten anmelden zu können,
anstatt für jede Webseite ein eigenes Benutzerkonto und Passwort zu benötigen.
Dabei wird das Konzept der URL-basierten Identität umgesetzt.

OpenID ist ein Single-Sign-On-System, vergleichbar mit dem Liberty Alliance Project,
gewährleistet durch die Dezentralisierung
– jeder kann einen OpenID-Server betreiben
– jedoch nicht die Vertrauenswürdigkeit der Benutzer.
Mittlerweile wird OpenID neben Brad Fitzpatrick von SixApart Ltd.
auch von dem zu VeriSign gewechselten David Recordon weiterentwickelt
und wird meist zusammen mit Yadis oder XRIs verwendet.

Vergleichbare Systeme, die bei höherer Komplexität mehr Funktionen bieten
sind Shibboleth und Liberty, die beide auf der
Security Assertion Markup Language (SAML) aufbauen.

Vergleichbare 'Closed-Source' Systeme: Microsofts 'Passport/Life-Account' oder T-Online's 'Netzausweis'.

Dokumente
- http://openid.net/specs.bml
- http://de.wikipedia.org/wiki/OpenID
- http://en.wikipedia.org/wiki/OpenID

Quellen & Infos
- http://www.openidenabled.com

Services
- https://www.myopenid.com


Features:
---------------------------------------------------------------------------
OpenID(-Login) besteht aus zwei teilen, einem Plugin (OpenID)
und einem Modul (OpenID-Login). Das Plugin stellt die API und Backendbearbeitung,
das Modul implementiert den Frontend-Login. Dabei werden einige Features von SF
und der neuen API-Struktur genutzt. Das ganze ist eine art Machbarkeitsstudie.

- Multiclient
- inclusive Modul

Author:
---------------------------------------------------------------------------
- STam

Lizenz:
---------------------------------------------------------------------------
GPL Lizenz (Version 2) und kann im Rahmen dieser Bestimmungen frei heruntergeladen,
genutzt, modifiziert, sowie verteilt werden.


Benötigte Sefrengo Version:
---------------------------------------------------------------------------
Sefrengo 1.4 beta2 (V. 01.03.01)


Installation:
---------------------------------------------------------------------------
Wechseln Sie in Ihrer Sefrengo Version in den Bereich "Administration -> Plugins".
Klicken Sie oben rechts auf "Plugin importieren". Am unteren Ende des Bereichs
befindet sich ein Uploadfeld. Wählen Sie hier die gewünschte "*.cmsplug"- Datei
aus. Mit einem Klick auf das Diskettensymbol wird das Plugin in das CMS importiert.
Das Plugin ist nun innerhalb des CMS nutzbar. Installieren Sie das Plugin mit einem
klick auf das Plugin-Importieren-Symbol in der Pluginzeile. Das Modul ist nach der
Installation sofort innerhalb des CMS nutzbar. Zum Stylen wird ein CSS-Style
'input.openid_login' mitgebracht, einfach in das vorhanden Stylesheet einbinden.

Hinweise:
---------------------------------------------------------------------------
Zum nutzen den OpenID-Logins braucht man eine OpenID-URL,
diese kann Beispielsweise bei https://www.myopenid.com angemeldet werden,
und muss dann im Backend unter 'Administration -> OpenID' einem Profil
zugewiesen werden.

Bekannte Bugs/ noch nicht fertige Bereiche:
---------------------------------------------------------------------------
- die Implementation der API kann nach Bugfixes in der SF-API leichter erfolgen.
- die Sprachstrings in 'plugins/OpenID/tpl/standard/lang/de/lang_general.php'
sind noch nicht Übersetzt.
- Fehler im Backend, beim wechsel zum Bereich 'Administration - OpenID-Benutzer bearbeiten'
verschwindet das Backend-Menü
- Es gibt nur eine Sprache: 'de/DE'
- Möglichkeit der Einweg-Registrierung ist deaktiviert
- Läuft nicht mit PHP5!


Dokumentation:
---------------------------------------------------------------------------
Keine vorhanden

QUELLTEXT
Changelog legend:
# -> Bug Fix
+ -> Addition
^ -> Change
- -> Removed
! -> Note
Current versionnumber is  01.00.00 - released 16.12.2006
------------------------------------------------------------------------------------------------!
Erste veröffentlichung




Download:
---------------------------------------------------------------------------
Klicken um den Anhang anzusehen
gunwalt
hört sich interessant an. Ich habe aber eine Weile gebraucht, bis ich das dahinterstehende Prinzip verstanden habe
STam
ZITAT
Ich habe aber eine Weile gebraucht, bis ich das dahinterstehende Prinzip verstanden habe
...
Ok, ich dachte schon das das gar keinen Interessiert smile.gif
Nun vielleicht könnte man das auch so Beschreiben:
Ein OpenSource - Gegenstück zu Microsofts 'Passport/Life-Account' oder T-Online's 'Netzausweis'.
Die Plattform ist frei, die Wahl der Server, dem der User vertraut auch.
Und man hat volle Kontrolle über seine Daten, respektive über die Daten die man einem Service-Anbieter (wie diesem Plugin) weitergibt.
pawel
Ich hatte erst einmal darüber gelesen (ich glaube in der c't) und schwupps gibt es das als Modul für SF biggrin.gif It's magic...
STam
Hmm,

11 Downloads und keine weiteren Reaktionen?
Nun gut warten wir mal 1'ne Woche ab und bei zu wenig
Interesse stelle ich die Entwicklung wieder ein.

Kann ja als 'technical demo' bleiben cool.gif

Gruß
gunwalt
ZITAT(STam @ Mon. 18. December 2006, 09:48) *
11 Downloads und keine weiteren Reaktionen?
Nun gut warten wir mal 1'ne Woche ab und bei zu wenig
Interesse stelle ich die Entwicklung wieder ein.


wäre sicherlich schade. sad.gif Ich denke, das es vielen wie mir geht, noch nie etwas davon gehört. Außerdem ist der Wert des Plugins weit über dem, was andere Module und Plugins beschreiben. Mir fällt gerade der Begriff Trans-CMS ein!! Gibt es wahrscheinlich gar nicht. sad.gif Das erklärt vielleicht auch die geringe Downloadrate.
Und, du hast eine ungünstige Zeit erwischt - vor Weihnachten - vg. auch lit. Post vom Samstag.

Ich bleibe auf jeden Fall dran.
pawel
Also ich brauche definitiv Zeit, um mich erst einmal mit den Möglichkeiten vertraut zu machen. Du "schmeißt" uns hier ein Plugin "um die Ohren" biggrin.gif, das für mich vom Verständnis etwa der gleiche Quantensprung ist, wie Mail und GnuPGP. Also bitte Geduld, du bekommst schon (im neuen Jahr) ein Feedback von mir. Bitte nicht einstellen. OpenID ist bisher in der Webwelt noch nicht so gebräuchlich, aber das kommt sicher in den nächsten 1,5 Jahren.
saschapi
Sehr interessanter Ansatz. Mir fehlt gerad nur die Zeit das anzutesten. Wenn ich das vor einem Monat gesehen hätte, wäre es vermutlich in einem aktuellen Projekt angetestet worden, aber da ist der Zug leider abgefahren. sad.gif

Mir gefällt die Idee aber riesig. Vielleicht kann ich zwischen den Jahren mal damit spielen.
Chregu
Ich finder der Ansatz auch sehr interessant. Den ich kann mir meine User/Passwörter einfach nicht mehr merken. Werde es über die Festtage einmal testen. Danke schon im Voraus!

Gruss
chris
MaZderMind
(auch wenns net so dolle hier reinpasst): http://www.bugmenot.com/ - echt seeehr hilfreich smile.gif

Gruß, Peter
alexander
für den ersten einstieg: http://simonwillison.net/2006/openid-screencast/
STam
@MaZderMind ph34r.gif
@alexander wub.gif ... guter Beitrag!

Ansonsten frohe Weihnachten smile.gif
MaZderMind
Hi
Hmmm also wenn ich den Menüpunkt "OpenID" aufrufe bekomme ich nur ne Fehlermeldung:
ZITAT
Fatal error: Call to a member function Execute() on a non-object in D:\work\www\sefrengo\backend\plugins\OpenID\API\ADMINISTRATION\OPENID\class.SF_ADMINISTRATION_OPENID_UserCollection.php on line 100


Das Problem ist, dass versucht wird die Klasse /backend/plugins/OpenID/API/DATABASE/class.SF_DATABASE_Ado.php einzubinden, die ja nicht existiert, weil mit
QUELLTEXT
$my_factory = $sf_factory;
$my_factory->api_path = $cfg_openid['api_path'];

der globale Pfad der API-Klassenfabrik geändert wird.
Wenn ich das richtig sehe dann soll $mod['factory'] = $GLOBALS['sf_factory']; eine Kopie der Factory erzeugen. Ich habe mal versucht das mit dem clone-Schlüsselwort zu erzwingen oder einfach ein neues Factory-Objekt zu erzeugen aber das auch nur Fehler...

Gruß, Peter

PS. Sry für meinen unproduktiven Beitrag oben O:-) Ich hatte den Sinn von OpenID ein wenig verkannt aber jetz bin ich sehr begeistert von der Idee und hoffe nur dass bald größere Projekte wie z.B. die Wikipedia einen OpenID-Login anbieten.
STam
ZITAT(MaZderMind @ Thu. 4. January 2007, 04:06) *
Ich habe mal versucht das mit dem clone-Schlüsselwort zu erzwingen
...
Hi,

das riecht schon nach PHP5, hmmm... sry, war mir nicht bekannt das SF überhaupt unter 5 läuft und somit auch nicht getestet!
Unter PHP4 wird die Klasse SF_ADMINISTRATION_OPENID_UserCollection ganz normal aufgerufen.
Die Klasse SF_DATABASE_Ado wird in der Zeile 8 '$this->db =& sf_factoryGetObjectCache('DATABASE', 'Ado');' instanziert. Der Pfad wird ja erst danach verbogen.
Unter PHP5 eben nicht, versuch doch mal in der Datei 'backend/plugins/OpenID/API/ADMINISTRATION/OPENID/class.SF_ADMINISTRATION_OPENID_User.php' und 'backend/plugins/OpenID/API/ADMINISTRATION/OPENID/class.SF_ADMINISTRATION_OPENID_UserCollection.php' vor Zeile 2 folgenden Code einzufügen:
QUELLTEXT
$GLOBALS['sf_factory']->requireClass('DATABASE', 'Ado');
... das sollte gehen smile.gif

Gruß
MaZderMind
*snüffsnüff* gute nase biggrin.gif
Und leider funkt es nicht sad.gif
Das Problem ist, das RequireClass auf jeden Fall auf die Existenz der Datei prüft (auch wenn die Datei bereits geladen wurde) und im Fehlerfall das erzeugen der Instanz verhindert.
Ich habe aus dem false ein true gemacht und musste dann noch folgende Klassen "vorladen" (ich habs in der OpenID_inc.php gemacht wink.gif ): SF_DATABASE_Ado, SF_PAGE_Pageinfos, SF_PAGE_Catinfos, SF_UTILS_DbCache, SF_UTILS_ArrayIterator, SF_ASSETS_DbFile, SF_GUI_Pager.

Ich schätze dass du das "verbiegen" des API-Pfades mit die Implementation der API kann nach Bugfixes in der SF-API leichter erfolgen. meinst..

Obwohls bei mir nich auf anhieb funktioniert hat: Großartiges Plugin. Ich sag das aus zwei Sichtweisen - einmal dass OpenID großartig is und die Implementation in Sefrengo ein riesiger Schritt ist, zum anderen weil das Plugin in der Implementation vorbildlich ist. Ein eigener API-Zweig *staun*

Allerdings funkt das dann bis zum einbinden des Moduls, dann gibts wieder einen Fehler wink.gif
Ich bastel nochn bisschen aber, aber insgeheim hoffe ich auf eine baldige erweiterung des APIs auf mehrere Quell-API-Pfade biggrin.gif

Gruß, Peter

[edit] Fehlte noch die Klasse SF_ADMINISTRATION_User in der Liste, jetz gehts.
MaZderMind
Hi
Soo jetz funktionierts also. Ich habe aber noch zwei Fragen:
1. Ich teste das Plugin in meiner DF-Sandbox von einem Loklen Server (s. Sig.) aus, welcher über eine Url wie http://sefrengo.<meinname>.homeip.net/ erreichen ist. Als Trust-Root wird aber http://sefrengo.<meinname>.homeip.net\ übergeben. Beim erlauben der URL gibt das dann einen Fehler. Ich vermute, dass es daran liegt dass ich ein Win-System habe und da ja ein anderer path_separator gesetzt ist (für lokale Systempfade). Wie der dann in die URL reingerutscht ist...

2. Wird es ein OpenID SignOn-Modul geben, mit dem ich mich quasi auf einer Seite die mich nicht kennt per OpenID anmelden kann und dann dort (evtl. nach aktivierung durch einen Admin) einen Account bekomme?

Gruß, Peter
MaZderMind
Noch ein Hinweis am Rande (ich hab grad die openid-Events in SFLog eingebaut): openid_login_error übergibt immer eine leere 'openid_url', auch wenn ich mich mit einer nicht vorhandenen OpenID anmelde (und das Event geworfen wird).

Gruß, Peter
STam
@MaZderMind,

auf so eine Diskussion freue ich mich schon seit wochen smile.gif
Ja, du hast Recht mit der API, folgende kleine Patches habe ich bei Björn angemeldet:
Datei 'API/API/class.SF_API_ObjectStore.php' Zeile 49 muss lauten
QUELLTEXT
var $store = array();
...
und Datei 'API/API/class.SF_API_ObjectFactory.php' reicht ab Zeile 91
QUELLTEXT
if (@require_once($file)) {
    return true;
}


Am besten wäre wenn man den Pfad dort gleich rausläßt und PHP über die 'include_path' Pfade suchen läßt,
dann könnte ein Plugin einfach per ini_set seinen CLASSPATH hinzufügen. Schick wäre es aber auch wenn ein Plugin über eine API-Methode seinen Pfad hinzufügen könnte. Das hätte auch den Vorteil das andere Module/Plugins die API aus solchen Plugin-API nutzen könnten (und Welten an Möglichkeiten zur Erweiterung öffnen sich wink.gif) So wie es jetzt gelöst ist, ist es ein Krampf und bestimmt nicht gewollt.

ZITAT
weil das Plugin in der Implementation vorbildlich ist. Ein eigener API-Zweig *staun*
... ich finde sogar ganz gut und auch sinnvoll, letzlich sollte man übertrieben gesagt SF komplett überladen können bzw. bei erweitern von SF das gleiche Verzeichnis-Design wie im Backend übernehmen (so wie das Plugin das auch mit den /inc und /tpl Pfaden tut), die Spracheinbindung folgt auch dem SF Design.

ZITAT
Ich vermute, dass es daran liegt dass ich ein Win-System habe und da ja ein anderer path_separator gesetzt ist (für lokale Systempfade). Wie der dann in die URL reingerutscht ist...
... schau ich mir an, auf die schnelle sehe ich das nicht (habe auch auf Win getestet!).

ZITAT
Wird es ein OpenID SignOn-Modul geben, mit dem ich mich quasi auf einer Seite die mich nicht kennt per OpenID anmelden kann und dann dort (evtl. nach aktivierung durch einen Admin) einen Account bekomme?
... Ja! Im Modul könnte das jetzt schon dort stehen:
QUELLTEXT
// openid
if ( $mod['action'] == 'openid_login' ) {
    if ( !$mod['user']->openidExists(OpenID_Standarize($mod['openid_url']))
        && (!$cfg_client['openid']['allow_create_account'] || !$cfg_cms['openid']['allow_create_account']) ) {
        $mod['error_message'] = 'openid_authentication_unknown';
        $redirect_url = sprintf($cfg_client['htmlpath'].$cfg_client['contentfile']."?&action=openid_error&error_message=%s&lang=%s&idcatside=%s",
            $mod['error_message'],
            $GLOBALS['lang'],
            $GLOBALS['idcatside']);
        $auth->logout();
        header("Location: ".$redirect_url);
    } else {
$mod['action'] = 'openid_create_account';      
$mod['openid'] =& $mod['factory']->getObject('HTTP/OPENID', 'Request', null, array('store_path' => $mod['cfg_openid']['store_path']));
    }
}
... dann muss in der switch ($mod['action']){} nur noch das Flag 'openid_create_account' abgefangen werden smile.gif

Gruß
MaZderMind
Hi
Ich sehe wie schön es ist mit einem eignene API-Zweig zu arbeiten, allerdings wäre es schön wenn man nicht ständig den API-Pfad verbiegen müsste sondern einfach zwei Pfade definieren könnte (z.B. mit dem Classpath-Ansatz).
Zur "Spracheinbindung im SF Design" - ich finde die Spracheinbindung in SF nur teilweise gelungen. Warum sind z.B. die Sprchen unterhalb des Templates eingeordnet? Was macht denn das für einen Sinn? Ein Template soll doch die Oberfläche gestalten und hat an sich nix mit Sprachen zu tun.

Gruß, Peter
STam
ZITAT
Zur "Spracheinbindung im SF Design" - ich finde die Spracheinbindung in SF nur teilweise gelungen. Warum sind z.B. die Sprchen unterhalb des Templates eingeordnet? Was macht denn das für einen Sinn? Ein Template soll doch die Oberfläche gestalten und hat an sich nix mit Sprachen zu tun.
... wo du Recht hast hast du Recht.
MaZderMind
QUELLTEXT
if (@require_once($file)) {
    return true;
}

Wird so nicht funktionieren, da require_once bei fehlenden Dateien immer false ausgibt, da es ja nicht wissen kann, dass die Datei gleichen namens identisch zu ihrem pendent in einem anderen Pfad ist.

Die einzige möglichkeit scheint tatsächlich zu sein, auf die Existenz der Klasse an sich zu prüfen:
QUELLTEXT
    function requireClass($package, $classname, $class_prefix = 'SF') {
        $file = $this->api_path . strtoupper($package) . '/class.'
              . $class_prefix . '_' . str_replace('/', '_', strtoupper($package))
              . '_' . $classname . '.php';
        
        $cla = ($subclassname == null) ? $classname : $subclassname;
        $cla = $class_prefix . '_' . str_replace('/', '_', strtoupper($package))
             . '_' . $cla;
        
        if(class_exists($cla)) return true;    
        if(file_exists($file)) {
            include_once($file);
            return true;
        }
        return false;
    }

Der file_exists-Aufruf ist wegen eines PHP-Bugs nötig: http://www.php.net/manual/de/function.include-once.php#53239.
Diese funktion checkt ob die angeforderte Klasse schon verfügbar ist. Wenn nicht wird versucht die zugehörige Datei einzubinden. Gelingt dies nicht wird false zurückgegeben, in allen anderen Fällen true.

Gruß, Peter
STam
Das Problem bei file_exists() ist, das es nicht in den include_path schauen kann, require(once) und include(once) nutzen auch den include_path von PHP wenn die Datei zuerst nicht im PATH gefunden wird!
MaZderMind
Nuja aber andersrum bekommst du wenn du ein @ vor dein include packst /garkeine/ Fehlermeldungen mehr aus der includierten Dateien also noch nichtmal Parse-Errors! Probiers aus wink.gif

Dann machen wirs halt so:
QUELLTEXT
$h = fopen($file, 'r', 1);
if($h !== false) {
    fclose($h);
    include_once($file);
    return true;
}


Gruß, Peter
STam
... das ist der Sinn von dem @ smile.gif den return bekommt man aber trotzdem.
MaZderMind
Hi
Ich sah das so dass so dass das @ nur die Fehlermeldung bei einer nicht vorhandenen Datei verhindern und nicht alle Fehlermeldungen innrhalb der Klasse -- das halte ich nämlich nicht für Sinnvoll. Als Klassenentwickler bekommt man dann nämlich schnell ordentliche Probleme wenn z.B. alle Parse-Fehler unterdrückt werden.

Du sprachst ja davon einen Bugfix einreichen zu wollen, nur dass dein Fix das Problem halt nich behoben habt. Mein Vorschlag ist nun dieser:
QUELLTEXT
    function requireClass($package, $classname, $class_prefix = 'SF') {
        $file = $this->api_path . strtoupper($package) . '/class.'
              . $class_prefix . '_' . str_replace('/', '_', strtoupper($package))
              . '_' . $classname . '.php';
        
        $cla = ($subclassname == null) ? $classname : $subclassname;
        $cla = $class_prefix . '_' . str_replace('/', '_', strtoupper($package))
             . '_' . $cla;
        
        if(class_exists($cla)) return true;    
        $h = fopen($file, 'r', 1);
        if($h !== false) {
            fclose($h);
            include_once($file);
            return true;
        }
        return false;
    }


Hier wird die Datei nur eingebunden wenn die angeforderte Klasse nicht existiert und beim einbindenden der Klasse zwar (ohne Fehlerausgabe) auf das vorhandensein der Datei geprüft (und bei ihrem Fehlen false zurücgegeben), aber trotzdem Fehler in der eingebundenen Datei ausgegeben.

Gruß, Peter
STam
Gibt es noch Anregungen, Wünsche oder weitere Bugs?
Ansonsten fange ich mit dem Final Paket an smile.gif

Gruß
tobaco
go final, go!
Tiggr
Hiho!

Hat das ganze schon wer im Einsatz?

Wie ist denn die Resonanz bei den Usern? Verstehen die was da abgeht, wenn Sie erstmal wo anders eine ID anlegen müssen, wird das aktzeptiert?

Tschüss
Tiggr (aka Marcus)
Tiggr
Hiho!

Mir ist nicht ganz klar, wie ich was ändern muß, damit es läuft, ich bekomme noch immer die Fehlermeldung:

QUELLTEXT
Fatal error: Call to a member function Execute() on a non-object in /var/www/sefrengo/backend/plugins/OpenID/API/ADMINISTRATION/OPENID/class.SF_ADMINISTRATION_OPENID_UserCollection.php on line 100


Hat wer die entsprechenden gepatchten Dateien?

Tschüss
Tiggr (aka Marcus)
Dieses ist eine vereinfachte Darstellung unseres Foreninhaltes. Um die detaillierte Vollansicht mit Formatierung und Bildern zu betrachten, bitte hier klicken.
Invision Power Board © 2001-2024 Invision Power Services, Inc.