Otentikasi dan Otorisasi

Otentikasi adalah proses verifikasi apakah seseorang yang mengaku siapa dirinya. Biasanya menyangkut nama pengguna dan kata sandi, tapi bisa menyertakan metode lain dari mendemonstrasikan identitas, seperti kartu pintar, sidik jari, dll.

Otorisasi adalah mendapatkan keterangan jika orang yang sekali teridentifikasi, diijinkan untuk memanipulasi sumber daya tertentu. Ini biasanya ditentukan dengan menyelidiki apakah orang itu memiliki aturan akses tertentu terhadap sumber daya atau tidak.

Bagaimana Kerangka Kerja Otentikasi PRADO Bekerja

PRADO menyediakan kerangka kerja otentikasi/otorisasi yang dapat diperluas. Seperti dijelaskan dalam masa hidup aplikasi, TApplication menyimpan beberapa masa hidup untuk modul yang bertanggung jawab terhadap otentikasi dan otorisasi. PRADO menyediakan modul TAuthManager untuk keperluan tersebut. Para pengembang dapat memasukan modul otentikasinya sendiri dengan mudah. TAuthManager didesain untuk dipakai bersama dengan modul TUserManager, yang menerapkan datbase pengguna hanya-baca.

Ketika sebuah permintaan halaman terjadi, TAuthManager akan mencoba untuk mengembalikan informasi pengguna dari sesi. Jika tidak ada informasi pengguna yang ditemukan, pengguna dianggap sebagai pengguna anonim atau tamu. Guna menjembatani verifikasi identitas pengguna, TAuthManager menyediakan dua metode yang umum dipakai: login() dan logout(). Pengguna dimasukan (diverifikasi) jika entitas nama pengguna serta kata sandinya sama dengan rekaman dalam database pengguna yang diatur oleh TUserManager. Pengguna dikeluarkan jika informasi pengguna dihapus dari sesi dan dia perlu masuk lagi jika dia membuat permintaan baru terhadap halaman.

Selama masa hidup aplikasi Otorisasi, yang terjadi setelah masa hidup Otentikasi, TAuthManager akan memverifikasi apakah pengguna saat ini mempunyai akses ke halaman yang diminta berdasarkan set aturan otorisasi. Otorisasi adalah berbasis-aturan, misalnya seorang pengguna memiliki akses ke sebuah halaman jika 1) halaman secara ekplisit menyatakan bahwa pengguna mempunyai akses; 2) atau pengguna adalah aturan tertentu yang memiliki akses ke halaman. Jika pengguna tidak mempunyai akses ke halaman, TAuthManager akan mengalihkan browser pengguna ke halaman masuk yang ditetapkan oleh properti LoginPage.

Menggunakan Kerangka Kerja Otentikasi PRADO

Untuk menghidupkan kerangka kerja otentikasi PRADO, tambahkan modul TAuthManager dan modul TUserManager ke konfigurasi aplikasi,

<service id="page" class="TPageService"> <modules> <module id="auth" class="System.Security.TAuthManager" UserManager="users" LoginPage="UserLogin" /> <module id="users" class="System.Security.TUserManager" PasswordMode="Clear"> <user name="demo" password="demo" /> <user name="admin" password="admin" /> </module> </modules> </service>

Di atas, properti UserManager dari TAuthManager disetel ke modul users yang adalah TUserManager. Para pengembang dapat menggantinya dengan modul manajemen pengguna yang berasal dari TUserManager.

Aturan otorisasi untuk halaman ditetapkan dalam konfigurasi halaman seperti berikut,

<authorization> <allow pages="PageID1,PageID2" users="User1,User2" roles="Role1" /> <deny pages="PageID1,PageID2" users="?" verb="post" /> </authorization>

Aturan otorisasi bisa berupa aturan allow atau aturan deny. Setiap aturan terdiri dari empat properti opsional:

Ketika permintaan halaman sedang diproses, daftar aturan otorisassi menjadi tersedia. Akan tetapi, hanya aturan efektif yang pertama menyamai pengguna saat ini akan menyajikan hasil otorisasi.

Dalam contoh di atas, pengguna anonim akan ditolak atas penulisan ke PageID1 dan PageID2, sementara User1 dan User2 dan semua pengguna aturan Role1 bisa mengakses dua halaman (baik metode get maupun post).

Sejak versi 3.1.1, atribut pages dalam aturan otorisasi dapat mengambil path halaman relatif dengan '*'. Sebagai contoh, pages="admin.Home" merujuk ke halaman Home di bawah direktori admin, dan pages="admin.*" akan merujuk ke seluruh halaman di bawah direktori admin dan subdirektorinya.

Juga diperkenalkan dalam versi 3.1.1 adalah aturan IP. Ini ditetapkan oleh atribut baru ip dalam aturan otorisasi. Aturan IP dipakai untuk menentukan apakah aturan otorisasi berlaku ke pengguna-akhir berdasarkan alamat IP-nya. Seseorang dapat mendaftar beberapa IP sekaligus, dipisahkan dengan koma ','. Wildcard '*' dapat dipakai dalam aturan. Sebagai contoh, ip="192.168.0.2, 192.168.1.*" berarti aturan berlaku untuk para pengguna yang alamat IP-nya 192.168.0.2 atau 192.168.1.*. Yang kedua sama dengan setiap host dalam subnet 192.168.1.

Menggunakan TUserManager

Seperti telah disebutkan di atas, TUserManager menerapkan database pengguna hanya-baca. Informasi pengguna ditetapkan baik dalam konfigurasi aplikasi ataupun file XML eksternal.

Kita telah melihat contoh di atas yang menggunakan dua pengguna ditetapkan dalam konfigurasi aplikasi. Sintaks lengkap atas penetapan pengguna dan informasi aturan adalah sebagai berikut,

<user name="demo" password="demo" roles="demo,admin" /> <role name="admin" users="demo,demo2" />

di mana atribut roles dalam elemen user adalah opsional. Aturan pengguna dapat ditetapkan baik dalam elemen user ataupun dalam elemen role terpisah.

Menggunakan TDbUserManager

TDbUserManager diperkenalkan dalam v3.1.0. Tujuan utamanya adalah untuk menyederhanakan tugas pengaturan akun pengguna yang disimpan dalam sebuah database. Ini membutuhkan para pengembang untuk menulis kelas pengguna yang mewakili informasi yang diperlukan untuk akun pengguna. Kelas pengguna harus diperluas dari TDbUser.

Untuk menggunakan TDbUserManager, konfigurasi itu dalam konfigurasi aplikasi seperti berikut:

Dalam contoh di atas, UserClass menetapkan bahwa kelas akan dipakai untuk membuat turunan pengguna. Kelas harus diperluas dari TDbUser. ConnectionID merujuk ke ID dari modul TDataSourceConfig yang menetapkan bagaimana untuk melakukan koneksi database guna mendapatkan informasi penggunanya.

Kelas pengguna harus menerapkan dua metode abstrak dalam TDbUser: validateUser() dan createUser(). Karena informasi akun pengguna disimpan dalam sebuah database, kelas pengguna dapat menggunakan properti DbConnection-nya untuk menjangkau database.

Sejak versi 3.1.1, TAuthManager menyediakan dukungan guna membolehkan mengingat yang masuk dengan menyetel AllowAutoLogin menjadi true. Oleh karena itu, TDbUser menambahkan dua metode untuk memfasilitasi implementasi fitur ini. Dalam keadaan tertentu, dua metode baru diperkenalkan: createUserFromCookie() dan saveUserToCookie(). Para pengembang harus mengimplementasikan dua metode ini jika mengingat yang sudah masuk diperlukan. Di bawah ini adalah contoh implementasi:

public function createUserFromCookie($cookie) { if(($data=$cookie->Value)!=='') { $application=Prado::getApplication(); if(($data=$application->SecurityManager->validateData($data))!==false) { $data=unserialize($data); if(is_array($data) && count($data)===3) { list($username,$address,$token)=$data; $sql='SELECT passcode FROM user WHERE LOWER(username)=:username'; $command=$this->DbConnection->createCommand($sql); $command->bindValue(':username',strtolower($username)); if($token===$command->queryScalar() && $token!==false && $address=$application->Request->UserHostAddress) return $this->createUser($username); } } } return null; } public function saveUserToCookie($cookie) { $application=Prado::getApplication(); $username=strtolower($this->Name); $address=$application->Request->UserHostAddress; $sql='SELECT passcode FROM user WHERE LOWER(username)=:username'; $command=$this->DbConnection->createCommand($sql); $command->bindValue(':username',strtolower($username)); $token=$command->queryScalar(); $data=array($username,$address,$token); $data=serialize($data); $data=$application->SecurityManager->hashData($data); $cookie->setValue($data); }