Programmer's Reference Guide
| LDAP Authentifizierung |
Open ID Authentifikation
Einführung
Zend_Auth_Adapter_OpenId erlaubt es Benutzer durch Verwendung eines entfernten OpenID
Servers zu authentifizieren. So ein Authentifizierungsprozess nimmt an das Benutzer nur ihre
OpenID Identität an die Web Anwendung übermitteln. Dann werden Sie zu Ihrem OpenID Anbieter
umgeleitet um die Eigentümerschaft der Identität mit Hilfe eines Passwortes oder einer anderen
Methode zu prüfen. Dieses Passwort ist der lokalen Web Anwendung nie bekannt.
Die OpenID Identität ist nur eine HTTP URL die auf eine Webseite mit entsprechenden Informationen über den Benutzer und spezielle Tags verweist welche beschreiben welcher Server verwendet werden soll und welche Identität dort zu übermitteln ist. Mehr über OpenID kann auf der » offiziellen OpenID Site nachgelesen werden.
Die Zend_Auth_Adapter_OpenId Klasse ist ein Wrapper auf Basis der
Zend_OpenId_Consumer Komponente welche das OpenID Authentifizierungs Protokoll selbst
implementiert.
Hinweis:
Zend_OpenIdhat Vorteile davon wenn die » GMP Erweiterung vorhanden ist. Es sollte Angedacht werden die GMP Erweiterung für eine bessere Performance einzuschalten wennZend_Auth_Adapter_OpenIdverwendet wird.
Spezielles
Wie jeder andere Zend_Auth Adapter implementiert die Zend_Auth_Adapter_OpenId
Klasse das Zend_Auth_Adapter_Interface, welches nur eine Methode definiert -
authenticate(). Diese Methode führt die Authentifizierung selbst durch, allerdings muß
das Objekt vor dem Aufruf vorbereitet werden. So eine Vorbereitung des Adapters beinhaltet das
Setzen der OpenID Identität und einige andere Zend_OpenId spezifische Optionen.
Trotzdem, im Gegensatz zu anderen Zend_Auth Adaptern führt er Authentifizierungen an einem
externen Server durch und das wird in zwei seperaten HTTP Anfragen getan. Deswegen muß
Zend_Auth_Adapter_OpenId::authenticate() zweimal aufgerufen werden. Das erste Mal wird
die Methode nichts zurückgeben, aber den Benutzer zu seinem OpenID Server umleiten. Dann, nach der
Authentifizierung auf dem Server wird dieser wieder zurück umleiten und das Skript muß für diese
zweite Anfrage Zend_Auth_Adapter_OpenId::authenticate() nochmals aufrufen um die
Signatur zu prüfen, welche mit der umgeleiteten Anfrage vom Server geschickt wird, und den
Authentifikationsprozess zu beenden. Dieses mal wird wie erwartet ein Zend_Auth_Result
Objekt zurückgegeben.
Das folgende Beispiel zeigt die Verwendung von Zend_Auth_Adapter_OpenId. Wie vorher
erwähnt wird die Zend_Auth_Adapter_OpenId::authenticate() Methode zweimal aufgerufen.
Das erste Mal - nachdem Übermitteln des HTML Formulars wenn $_POST['openid_action']
auf "login" gesetzt wurde, und das zweite Mal nach der HTTP Umleitung vom OpenID Server
wenn $_GET['openid_mode'] oder $_POST['openid_mode'] gesetzt wurde.
<?php
require_once "Zend/Auth.php";
require_once "Zend/Auth/Adapter/OpenId.php";
$status = "";
$auth = Zend_Auth::getInstance();
if ((isset($_POST['openid_action']) &&
$_POST['openid_action'] == "login" &&
!empty($_POST['openid_identifier'])) ||
isset($_GET['openid_mode']) ||
isset($_POST['openid_mode'])) {
$result = $auth->authenticate(
new Zend_Auth_Adapter_OpenId(@$_POST['openid_identifier']));
if (!$result->isValid()) {
$status = "Sie sind angemeldet als " . $auth->getIdentity() . "<br>\n";
} else {
$auth->clearIdentity();
foreach ($result->getMessages() as $message) {
$status .= "$message<br>\n";
}
}
} else if ($auth->hasIdentity()) {
if (isset($_POST['openid_action']) &&
$_POST['openid_action'] == "logout") {
$auth->clearIdentity();
} else {
$status = "Sie sind angemeldet als " . $auth->getIdentity() . "<br>\n";
}
}
?>
<html><body>
<?php echo "$status";?>
<form method="post"><fieldset>
<legend>OpenID Login</legend>
<input type="text" name="openid_identifier" value="">
<input type="submit" name="openid_action" value="login">
<input type="submit" name="openid_action" value="logout">
</fieldset></form></body></html>
*/
Es ist gestattet den OpenID Authentifizierungs Prozess anzupassen durch: Empfangen der Umleitung
vom OpenID Server an einer eigenen Seite, durch spezifizieren einer "root" der Webseite. In diesem
Fall muß ein eigener Zend_OpenId_Consumer_Storage oder
Zend_Controller_Response verwendet werden. Es ist auch möglich eine einfache
Registrierungs erweiterung zu verwenden um Informationen über den Benutzer vom OpenID Server zu
erhalten. Alle diese Möglichkeiten werden detailierter in der Zend_OpenId_Consumer
Referenz beschrieben.
| LDAP Authentifizierung |
