turk porno porno escort rokettube
Ergebnis 1 bis 5 von 5

Thema: ZfcUser Autologon mit Zertifikaten

  1. #1
    Benutzer
    Registriert seit
    27.09.2007
    Ort
    Dresden
    Beiträge
    43
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard ZfcUser Autologon mit Zertifikaten

    Hallo @all,

    ich spiele gerade ein wenig mit dem ZF2 und habe mir eine Testapplikation an Hand des Tutorials ZfcUser, BjyAuthorize and Doctrine working together - Sam minds erstellt. Jetzt möchte ich den Loginprozess um einen Autologin für User die ein Zertifikat presentieren erweitern. Da ich noch nicht so viel Erfahrung habe bin ich mir unsicher wo und wie das ganze implementiert wird.
    Aktuell habe ich in der Anwendung ein Modul auf das nur nach Anmeldung zugegriffen werden kann. Soweit so gut, das funktioniert auch alles. Die Abfrage ob der User angemeldet ist habe ich in die die Bootstrap Funktion der Module.php im Application Modul eingefügt. Meine Überlegung war jetzt innerhalb der Überprüfung ob ein User angemeldet ist, für User die ein gültiges Zertifikat presentieren den Logon bzw. die Registartion und Logon automatisch vorzunehmen

    Hier mal der ein Codeschnipsel wie ich mir das vorstell

    PHP-Code:
    // Auto logon via user certificate
                
    if($e->getRequest()->getServer('SSL_CLIENT_VERIFY') == 'SUCCESS')
                {
                    
    $SSLClientDnEmail $e->getRequest()->getServer('SSL_CLIENT_S_DN_Email');
                            
                    
    // trigger authenticate action
                    
                    // user not exist, create new useracount and retry authenticate action
                    
    if(!$auth->hasIdentity())
                    {
                        
    // cretae useraccount
                        
                        // authenticate
                    
    }
                } 
    Für mich stellt sich die Frage ob ich hier die Authentisierung komplett noch mal neu progammieren muss oder auf die authenticate Action des ZfcUserAuthentication Controllers redirecten kann. Und wenn ja, wie?

    Hier noch mal der komplette Code der aktuellen Modul.php
    PHP-Code:
    protected $whitelist = array(
            
    'home',
            
    'application',
            
    'zfcuser/login',
            
    'zfcuser/register',          
    );

    public function 
    onBootstrap(MvcEvent $e)
        {
            
    $translator          $e->getApplication()->getServiceManager()->get('translator');
            
    $eventManager        $e->getApplication()->getEventManager();
            
    $serviceManager      $e->getApplication()->getServiceManager();
            
    $moduleRouteListener = new ModuleRouteListener();
            
    $moduleRouteListener->attach($eventManager);        

            
    /**
             * enable global authentication
             * see: http://stackoverflow.com/questions/14137868/zend-framework-2-global-check-for-authentication-with-zfcuser
             */
            // BEGIN global authentication        
            
    $list $this->whitelist;
            
    $auth $serviceManager->get('zfcuser_auth_service');        
            
            
    $eventManager->attach(MvcEvent::EVENT_ROUTE, function($e) use ($list$auth) {
                
    $match $e->getRouteMatch();
                
                
    // \Zend\Debug\Debug::dump($e->getRequest());
               
                
                // No route match, this is a 404
                
    if (!$match instanceof RouteMatch) {
                    return;
                }

                
    // Route is whitelisted
                
    $name $match->getMatchedRouteName();
                if (
    in_array($name$list)) {
                    return;
                }

                
    // User is authenticated
                
    if ($auth->hasIdentity()) {
                    return;
                }

                
    // Auto logon via user certificate
                
    if($e->getRequest()->getServer('SSL_CLIENT_VERIFY') == 'SUCCESS')
                {
                    
    $SSLClientDnEmail $e->getRequest()->getServer('SSL_CLIENT_S_DN_Email');
                            
                     
                    
                    if(
    $auth->hasIdentity())
                    {
                        return;
                    }
                }
                
                
                
    // Redirect to the user login page, as an example
                
    $router   $e->getRouter();
                
    $url      $router->assemble(array(), array(
                    
    'name' => 'zfcuser/login'
                
    ));

                
    $response $e->getResponse();
                
    $response->getHeaders()->addHeaderLine('Location'$url);
                
    $response->setStatusCode(302);

                return 
    $response;
            }, -
    100);
            
    // END global authentication
        

    Gruß Maik

  2. #2
    Erfahrener Benutzer Avatar von [-UFO-]Melkor
    Registriert seit
    06.01.2009
    Beiträge
    327
    Thanks
    0
    Thanked 34 Times in 31 Posts

    Standard

    Wenn ich dich richtig verstehe, sollte es reichen, einen eigenen Authentication-Adapter zu schreiben.
    Guck dir mal GoalioRememberMe an, die nutzen ebenfalls einen eigenen Adapter.
    Blog über PHP und das ZF2

  3. #3
    Benutzer
    Registriert seit
    27.09.2007
    Ort
    Dresden
    Beiträge
    43
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ok, dann schau ich da, mal sehen ob ich damit weiter komm. Dank dir für den Hinweis.
    Gruß Maik

  4. #4
    Benutzer
    Registriert seit
    27.09.2007
    Ort
    Dresden
    Beiträge
    43
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    So, nachdem ich mir jetzt https://github.com/goalio/GoalioReme...alioRememberMe und https://github.com/Nitecon/zfcuser-ldap angesehen habe, bin ich der Meinung das ein eigenes Modul für das was ich möchte etwas Overkill ist.
    Noch mal kurz zur Erklärung was ich eigentlich möchte. Es soll lediglich aus einm Zertifikat die Userdaten ausgelesen werden und der Authentisierungsprozess automatisch initialisiert werden
    hier noch mal wie die Authentisierung normal abläuft

    • ein User ist nicht angemeldet und ruft eine geschützte Seite auf
      • normales Verhalten
        • Loginform anzeigen
        • Eingabe Userdaten
        • Loginform absenden
        • Authentisierung



    und hier das Verhalten wenn ein gültiges Zertifikat vorhanden ist


    • verhalten mit Zertifikat
      • kein Loginform anzeigen
      • Credentials aus Zertifikat auslesen
      • Authentisierung triggern
        • Erfolg: authentisiert
        • Fehler: Anzeige Loginform




    Also wenn der User ein gültiges Zertifikat presentiert werden die Anmeldedaten aus dem Zertifikat ausgelesen und die Authentisierung automatisch initialisiert.

    Das ganze habe ich jetzt durch eine kleine Erweiterung in der onBootstrap Funktion in der Application/Modle.php eingebaut

    PHP-Code:
    public function onBootstrap(MvcEvent $e)
        {
            
    $translator          $e->getApplication()->getServiceManager()->get('translator');
            
    $eventManager        $e->getApplication()->getEventManager();
            
    $serviceManager      $e->getApplication()->getServiceManager();
            
    $moduleRouteListener = new ModuleRouteListener();
            
    $moduleRouteListener->attach($eventManager);        

            
    /**
             * enable global authentication
             * see: http://stackoverflow.com/questions/14137868/zend-framework-2-global-check-for-authentication-with-zfcuser
             */
            // BEGIN global authentication        
            
    $list $this->whitelist;
            
    $auth $serviceManager->get('zfcuser_auth_service');        
            
            
    $eventManager->attach(MvcEvent::EVENT_ROUTE, function($e) use ($list$auth)
            {
                
    $match $e->getRouteMatch();                      
                
                
    // No route match, this is a 404
                
    if (!$match instanceof RouteMatch) {
                    return;
                }                                                                
                
                
    // Route is whitelisted
                
    $name $match->getMatchedRouteName();

                
    // try autologin with certificate
                
    if('zfcuser/login' == $name)
                {
                    
    $userIsLoggedIn  $e->getApplication()->getServiceManager()->get('zfcuser_auth_service')->hasIdentity();
                    
    $sslClientVerify $e->getRequest()->getServer('SSL_CLIENT_VERIFY');
                    
                    
    // do autologin only if not done before and client certificate is valid         
                    
    if(!$userIsLoggedIn && $sslClientVerify == 'SUCCESS')
                    {
                        
    $identity   $e->getRequest()->getServer('SSL_CLIENT_S_DN_Email');
                        
    $credential 'blafasel';    // FIXME: hardcoded PW for testing only
                        
                        
    $e->getRequest()->getPost()->set('identity',$identity);
                        
    $e->getRequest()->getPost()->set('credential'$credential);
                                   
                        
    $adapter $e->getApplication()->getServiceManager()->get('ZfcUser\Authentication\Adapter\AdapterChain');
                        
    $adapter->prepareForAuthentication($e->getRequest());
                        
                        
    $authService $e->getApplication()->getServiceManager()->get('zfcuser_auth_service');
                        
    $result $authService->authenticate($adapter);

                        
    // User is authenticated
                       
    if ($auth->hasIdentity()) {
                           return;
                       }     
                        
                    }    
                    
                }
                
                if (
    in_array($name$list)) {               
                    return;
                }            
                
                
    // User is authenticated
                
    if ($auth->hasIdentity()) {
                    return;
                }                        
                
                
    // Redirect to the user login page, as an example
                
    $router   $e->getRouter();
                
    $url      $router->assemble(array(), array(
                    
    'name' => 'zfcuser/login'
                
    ));                        

                
    $response $e->getResponse();
                
    $response->getHeaders()->addHeaderLine('Location'$url);
                
    $response->setStatusCode(302);

                return 
    $response;
            }, -
    100);
            
    // END global authentication
        

    Nun wäre ich natürlich als Anfänger an eurer Meinung interessiert ob das nun gut ist, oder warum man das eventuell so nicht machen sollte?
    Geändert von laubegaster (26.11.2013 um 12:47 Uhr)
    Gruß Maik

  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von laubegaster Beitrag anzeigen
    …bin ich der Meinung das ein eigenes Modul für das was ich möchte etwas Overkill ist.

    Das ganze habe ich jetzt durch eine kleine Erweiterung in der onBootstrap Funktion in der Application/Modle.php eingebaut
    Warum „Overkill“?

    Wenn du das Modul als eine wiederverwendbare Einheit betrachtest, dann wäre die Wiederverwendbarkeit bei dir nicht geben. Ein Modul muss keine Unterordner oder eine Großzahl an Klassen beinhalten. Es kann auch nur eine einzige Klasse sein, welche eine bestimmte Funktionalität bietet.

    Einfache Beispiele mit ein oder zwei Klassen wären Filter, View-Helfer, Formularelement, DB-Adapter, Barcode-Renderer usw.
    Es muss nicht immer eine „ZfcUser“ sein.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 08.09.2013, 19:33
  2. Zfcuser - 'Supplied credential is invalid.'
    Von Powers im Forum ZF2 Auth
    Antworten: 2
    Letzter Beitrag: 21.07.2013, 15:21
  3. Antworten: 9
    Letzter Beitrag: 29.06.2013, 00:30
  4. ZfcUser Problem
    Von JulienP88 im Forum ZF2 Auth
    Antworten: 1
    Letzter Beitrag: 04.06.2013, 14:24
  5. ZfcUser Form anpassen (in Bootstrap-Layout)
    Von tector im Forum ZF2 Formulare
    Antworten: 5
    Letzter Beitrag: 18.10.2012, 10:41

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •