Zend_Auth ile Kimlik Doğrulama İşleminin Gerçekleştirilmesi

Share Button

Zend_Auth, Zend Framework’un oldukça kullanışlı kütüphanelerinden birisidir. Çeşitli kimlik doğrulama servislerine sağladığı destekle projenizin kimlik doğrulama mekanizmasını hızlıca biryerden biryere taşıyabilmenize olanak sağlar. Örneğin Zend üzerinde geliştirdiğiniz intranetinizin kimlik doğrulama işlemini Zend_Auth_Adapter_DbTable kullanarak veritabanındaki kullanıcı kayıtları üzerinden gerçekleştirirken, küçük bir geliştirme ile kimlik doğrulama operasyonunuzu şirketinizdeki LDAP sunucusu üzerine taşıyarak, uygulamanızı firmanızdaki e-posta hesapları, domain kullanıcıları ve IP telefonlar gibi sistemlerle aynı authentication servisini kullanarak kolayca yönetmeniz mümkündür.

Zend_Auth, bize aşağıdaki adaptörleri kullanarak kimlik doğrulama işlemi yapabilmemize olanak sağlar:

  • Zend_Auth_Adapter_DbTable
  • Zend_Auth_Adapter_Digest
  • Zend_Auth_Adapter_Http
  • Zend_Auth_Adapter_Ldap
  • Zend_Auth_Adapter_OpenId

Yukarıdaki adaptörleri kullanabildiğiniz gibi sizler de Zend_Auth_Adapter_Interface arayüzüne tabi yeni bir adaptör yazarak kendi kimlik doğrulama servisinizi geliştirebilirsiniz.

Bugün, konuyu temel düzeyde anlatabilmek adına sizlerle veritabanı adaptörünü kullanarak kimlik doğrulama işleminin nasıl gerçekleştirildiğini inceleyeceğiz.

Kimlik Doğrulama İşleminin Zend_Auth_Adapter_DbTable kullanılarak Gerçekleştirilmesi:

Zend_Auth_Adapter_DbTable, kimlik doğrulama işleminin veritabanındaki bir tabloda yeralan kullanıcı kayıtlarını kullanarak gerçekleştirilmesini sağlar. İnşası sırasında bizden aşağıdaki konfigürasyon verilerini beklemektedir:

zendDb: Zend_Db_Adapter_Abstract tipindeki veritabanı bağlantısını içerir.

tableName: Bu parametre, kullanıcı kimlik verilerinin bulunduğu veritabanındaki tablonun adını içermelidir.

identityColumn: Bu alan kullanıcı adı veya e-posta adresi gibi uniq bir kimlik verisi içermelidir.

credentialColumn: Kullanıcı adı/parola şemasındaki kimlik doğrulama yapılarında bu alan, kullanıcı parolasını içermelidir.

credentialTreatment: Pek çok durumda kullanıcı parolasının farklı algoritmalarla şifrelenmesi istenir. Bu alanda şifrelemenin nasıl gerçekleştirileceği metin olarak belirtilir. (MD5(?) gibi)

Ben inceleyeceğimiz örneklerde MySQL tercih ettim. Sizler dilerseiniz, MonboDB, SQLLite veya başka bir veritabanı kullanabilirsiniz.

İlk olarak kullanıcı tablomuzu oluşturalım.

CREATE TABLE `intranet_users` (
`id` INTEGER  NOT NULL AUTO_INCREMENT, 
`username` VARCHAR(50) UNIQUE NOT NULL, 
`password` VARCHAR(32) NULL, 
`real_name` VARCHAR(150) NULL,
PRIMARY KEY (id));

Veritabanı bağlantımızı oluşturalım.

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'myintranetapp'
));

Yeni bir Zend_Auth_Adapter_DbTable örneği oluşturarak konfigürasyon verilerini örneğin inşası sırasında parametre olarak gönderiyoruz.

$authAdapter = new Zend_Auth_Adapter_DbTable(
    $db,
    'intranet_users',
    'username',
    'password'
);

Kullanıcı adı ve parola bilgilerimizi adaptöre tanımlıyoruz.

authAdapter->setIdentity('myusername')
           ->setCredential('mypassword');

Oturum açıyoruz.

$auth = = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);

Kimlik doğrulama işleminin başarılı/başarısız olma durumunu kontrol ediyoruz.

if( $result->isValid() ) {
    //Oturum basariliyse birseyler yap.
} else {
    //Oturum basarisizsa birseyler yap.
}

Kullanıcımızın kimliğini doğruladık. Ancak bu yeterli değil. Kimlik doğrulamasının başarılı olması durumunda oturum bilgisinin isteğe bağlı olarak dosya sistemi, memory veya veritabanı gibi biryerde saklanması gerekmektedir. Zend_Auth objesi bu bilgileri kayıt etmek için varsayılan olarak PHP Session objesini kullanır. Sizler uygulamalarınızda oturum verilerini dilerseniz veritabanı, dosya sistemi veya Zend_Auth_Storage_Interface arayüzüne uygun kendi geliştireceğiniz farklı bir depolama alanında saklayabilirsiniz.

if( $result->isValid() ) {
    $storage = $auth->getStorage();
    $storage->write($authAdapter->getResultRowObject(array('username', 'real_name')));
} else {
    //Oturum basarisizsa birseyler yap.
}

Projenizin herhangibir yerinde oturum durumunu kontrol etmek isterseniz:

$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) {
  echo $auth->getIdentity();
}

Oturumu sonlandırmak isterseniz:

$auth = Zend_Auth::getInstance();
$auth->clearIdentity();

Zend_Auth kütüphanesini temel düzeyde inceledik. Sizler de bu kütüphaneyi kolayca uygulamalarınıza uyarlayabilirsiniz. Zend_Auth ile ilgili daha fazla bilgi edinmek için http://framework.zend.com/manual/1.12/en/zend.auth.html sayfasını ziyaret edebilirsiniz. Bu blog yazısı ile Zend_Auth kütüphanesini kullanabileceğinizi düşünüyorsanız, diğer kimlik doğrulama adaptörlerinin kullanımı, yeni bir kimlik doğrulama adaptörünün geliştirilmesi ve diğer session storage adaptörlerinin kullanımı konularını incelemenizi öneririm.

Share Button

About İbrahim Gündüz

1983 yılında İstanbul’da doğdu. İlkokul yıllarında cobol ve basic le olan tanışması, yazılıma olan ilgisini arttırdı 2005 yılında. Uludağ Üniversitesi Teknik Bilimler Meslek Yüksek Okulu Elektronik bölümünden mezun olan Gündüz, çeşitli alanlarda faaliyet gösteren kurumlarda yazılım geliştirici olarak görev almıştır. Mesleki ilgi alanları, ölçeklenebilir sistemler, uygulama entegrasyonları ve ödeme sistemleridir. Halen Markafoni back end geliştirici olarak çalışmaktadır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir