3. Berita dan Dokumentasi simpleSAMLphp
Untuk melihat dokumentasi lengkap terkait simpleSAMLphp Anda dapat mengunjungi beberapa
sumber berikut :
• Daftar lengkap Dokumentasi simpleSAMLphp, http://simplesamlphp.org/docs
• Berita terbaru terkait simpleSAMLphp, https://rnd.feide.no/category/simplesamlphp/
• Homepage simpleSAMLphp, http://rnd.feide.no/simplesamlphp
Pendahuluan
Artikel ini mengasumsikan kalau Anda telah membaca manual instalasi simpleSAMLphp dan telah
menginstall versi terbaru simpleSAMLphp di server Anda.
Pada contoh kali ini Kita akan menyiapkan server ini sebagai IdP untuk berbagai aplikasi yang akan
kita integrasikan nanti : http://idp.negeripelangi.org.
Mengaktifkan Fungsionalitas Identity Provider
Edit config/config.php, dan Aktifkan SAML 2.0 IdP :
'enable.saml20-idp' => true,
'enable.shib13-idp' => false,
Menyiapkan SSL Signing Certificate
Untuk tujuan percobaan, Anda dapat melewati bagian ini, dan menggunakan certificate default yang
sudah ada.
Untuk sistem yang sudah produktif, Anda harus membuat sendiri certificate untuk IdP Anda.
Peringatan
Paket software simpleSAMLphp memiliki certificate yang dapat Anda gunakan untuk tujuan
percobaan, tetapi tentu saja, jangan sekali-kali menggunakan certificate ini pada sistem yang
sudah produktif karena private key dari certificate ini juga disertakan didalam paket software
simpleSAMLphp dan dapat didownload oleh siapa saja.
Berikut ini adalah sebuah contoh perintah openssl untuk membuat key baru dan selfsigned
certificate yang akan digunakan untuk men-signing SAML messages :
3
4. openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out
eofficeidp.crt -keyout negeripelangiidp.pem
Certificate diatas akan valid untuk 10 tahun.
Catatan : simpleSAMLphp hanya dapat bekerja dengan certificate RSA dan DSA.
Sumber Autentifikasi
Langkah selanjutnya adalah mengkonfigurasi bagaimana cara user melakukan autentifikasi ke IdP
Anda. Berbagai modul di direktori modules/ menyediakan berbagai metode untuk melakukan
autentifikasi user Anda. Berikut ini adalah ulasan sekilas tentang beberapa metode yang akan kita coba
gunakan :
exampleauth:UserPass
Melakukan Autentifikasi terhadap daftar username dan password.
exampleauth:Static
Secara otomatis log in sebagai user dengan attribute-attribute yang telah didefinisikan.
ldap:LDAP
Melakukan autentifikasi terhadap server LDAP.
ldap:LDAPMulti
Melakukan autentifikasi terhadap sebuah server LDAP dari beberap server LDAP yang telah
didaftarkan
sqlauth:SQL
Melakukan autentifikasi terhadap RDBMS
saml:SP
Melakukan autentifikasi terhadap SAML IdP.
authfacebook:Facebook
Melakukan autentifikasi dengan Facebook ID.
authtwitter:Twitter
Melakukan autentifikasi dengan akun Twitter Anda via API OAuth Twitter.
Pada konfigurasi di dokumentasi ini, Kita akan menggunakan modul autentifikasi sqlauth:SQL.
4
5. Mengkonfigurasi Sumber Autentifikasi
Modul exampleauth
exampleauth:UserPass
Modul autentifikasi Exampleauth:UserPass merupakan bagian dari modul exampleauth. Module
secara default tidak diaktifkan, jadi sebelum menggunakannya, Anda harus mengaktifkannya terlebih
dahulu. Untuk mengaktifkannya, buat file bernama enable pada direktori modules/exampleauth.
Di Linux Anda dapat melakukannya dengan menggunakan perintah berikut :
touch modules/exampleauth/enable
Langkah selanjutnya adalah membuat authentication source (sumber autentifikasi) untuk modul ini.
Sumber autentifikasi adalah sebuah module autentifikasi dengan konfigurasi khusus. Setiap sumber
autentifikasi memiliki sebuah nama, yang digunakan sebagai rujukan ketika melakukan konfigurasi
pada IdP. Konfigurasi untuk sumber autentifikasi dapat ditemukan di config/authsources.php.
Berikut adalah contoh konfigurasi sumber autentifikasi yang menggunakan module
exampleauth:UserPass :
<?php
$config = array(
'example-userpass' => array(
'exampleauth:UserPass',
'student:studentpassword' => array(
'uid' => array('student'),
'eduPersonAffiliation' => array('member', 'student'),
),
'employee:employeepassword' => array(
'uid' => array('employee'),
'eduPersonAffiliation' => array('member', 'employee'),
),
),
);
Konfigurasi ini membuat dua buah user, yaitu student dan employee dengan password masing-masing,
studentpassword dan employeepassword. Username dan password disimpan sebagai index dari sebuah
array sedangkan attribute setiap user dikonfigurasi dalam bentuk array dimana index array tersebut
menjadi referensinya. Untuk user student, atribut-atribut ini adalah :
5
6. array(
'uid' => array('student'),
'eduPersonAffiliation' => array('member', 'student'),
),
Atribut-atribut ini akan dikembalikan oleh IdP ketika user login.
exampleauth:Static
Modul autentifikasi exampleauth:Static merupakan bagian dari modul exampleauth. Berikut adalah
contoh sumber autentifikasi yang menggunakan exampleauth:Static :
'example-static' => array(
'exampleauth:Static',
'uid' => array('testuser'),
'eduPersonAffiliation' => array('member', 'employee'),
'cn' => array('Test User'),
),
Dengan module ini, kita otomatis login dengan atribut-atribute yang telah ditentukan.
Modul LDAP
Modul LDAP menyediakan metode untuk melakukan autentifikasi terhadap server LDAP. Pada modul
ini rerdapat dua buah modul autentifikasi dan dua buah process filters (filter pemroses).
• ldap:LDAP
Melakukan autentifikasi ke sebuah server LDAP
• ldap:LDAPMulti
Pengguna boleh memilih satu dari beberapa sumber LDAP sebagai sumber autentifikasi
• ldap:AttributeAddFromLDAP
Menambahkan sebuah nilai atribut dari LDAP ke request
• ldap:AttributeAddUsersGroups
Menambahkan sebuah atribute ke semua user yang menjadi anggota group tertentu.
ldap:LDAP
Modul ini digunakan jika Anda memiliki sebuah organisasi dengan sebuah server LDAP tunggal yang
menyimpan seluruh data user. Untuk membuat sumber autentifikasi LDAP, buka
config/authsources.php, kemudian tambahkan entri berikut :
6
7. 'example-ldap' => array(
'ldap:LDAP',
// Give the user an option to save their username for
future login attempts
// And when enabled, what should the default be, to save
the username or not
//'remember.username.enabled' => FALSE,
//'remember.username.checked' => FALSE,
// The hostname of the LDAP server.
'hostname' => 'ldap.example.org',
// Whether SSL/TLS should be used when contacting the LDAP
server.
'enable_tls' => FALSE,
// Whether debug output from the LDAP library should be
enabled.
// Default is FALSE.
'debug' => FALSE,
// The timeout for accessing the LDAP server, in seconds.
// The default is 0, which means no timeout.
'timeout' => 0,
// Which attributes should be retrieved from the LDAP
server.
// This can be an array of attribute names, or NULL, in
which case
// all attributes are fetched.
'attributes' => NULL,
// The pattern which should be used to create the users DN
given the username.
// %username% in this pattern will be replaced with the
users username.
//
// This option is not used if the search.enable option is
set to TRUE.
'dnpattern' => 'uid=%username
%,ou=people,dc=example,dc=org',
7
8. // As an alternative to specifying a pattern for the users
DN, it is possible to
// search for the username in a set of attributes. This is
enabled by this option.
'search.enable' => FALSE,
// The DN which will be used as a base for the search.
// This can be a single string, in which case only that DN
is searched, or an
// array of strings, in which case they will be searched in
the order given.
'search.base' => 'ou=people,dc=example,dc=org',
// The attribute(s) the username should match against.
//
// This is an array with one or more attribute names. Any
of the attributes in
// the array may match the value the username.
'search.attributes' => array('uid', 'mail'),
// The username & password the simpleSAMLphp should bind to
before searching. If
// this is left as NULL, no bind will be performed before
searching.
'search.username' => NULL,
'search.password' => NULL,
// If the directory uses privilege separation,
// the authenticated user may not be able to retrieve
// all required attribures, a privileged entity is required
// to get them. This is enabled with this option.
'priv.read' => FALSE,
// The DN & password the simpleSAMLphp should bind to
before
// retrieving attributes. These options are required if
// 'priv.read' is set to TRUE.
'priv.username' => NULL,
'priv.password' => NULL,
),
...
8
9. ldap:LDAPMulti
...
ldap:AttributeAddFromLDAP
...
ldap:AttributeAddUsersGroups
..
sqlauth
sqlauth:SQL
Sumber autentifikasi sqlauth:SQL adalah bagian dari module sqlauth. Modul ini sudah diaktifkan
secara default. Jadi yang harus Anda lakukan tinggal mendefinisikan sumber autentifikasi di
config/authsources.php.
Skema database yang digunakan adalah skema database yang digunakan pada FOSUserBundle di
symfony2 :
CREATE TABLE negeripelangi_user (id INT AUTO_INCREMENT NOT NULL,
username VARCHAR(255) NOT NULL, username_canonical VARCHAR(255) NOT
NULL, email VARCHAR(255) NOT NULL, email_canonical VARCHAR(255) NOT
NULL, enabled TINYINT(1) NOT NULL, salt VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL, last_login DATETIME DEFAULT NULL,
locked TINYINT(1) NOT NULL, expired TINYINT(1) NOT NULL, expires_at
DATETIME DEFAULT NULL, confirmation_token VARCHAR(255) DEFAULT NULL,
password_requested_at DATETIME DEFAULT NULL, roles LONGTEXT NOT NULL
COMMENT '(DC2Type:array)', credentials_expired TINYINT(1) NOT NULL,
credentials_expire_at DATETIME DEFAULT NULL, UNIQUE INDEX
UNIQ_1EC5827A92FC23A8 (username_canonical), UNIQUE INDEX
UNIQ_1EC5827AA0D96FBF (email_canonical), PRIMARY KEY(id)) DEFAULT
CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
Buka file config/authsources.php dan tambahkan konfigurasi berikut :
9
10. 'fosuserbundle-sql' => array(
'sqlauth:SQL',
'dsn' => 'mysql:host=localhost;port=3306;dbname=npprofile',
'username' => 'npprofile',
'password' => 'rahasia!!',
'query' => 'SELECT username, email FROM negeripelangi_user WHERE
username = :username AND password = :password',
),
Sesuaikan entri username dan password sesuai dengan yang Anda telah buat.
Khusus untuk sumber autentifikasi sqlauth:SQL dengan FOSUserBundle dokumentasinya dapat dibaca
di alamat :
http://workshop.openthinklabs.com/resources/-federated-
identity/membangun-platform-single-sign-on-sso-berbasis-security-
assertion-markup-language-saml/artikel/sumber-autentifikasi/sqlauth-
sql
saml:SP
...
authfacebook:Facebook
...
authtwitter:Twitter
...
Mengkonfigurasi Metadata untuk SAML 2.0 IdP
Jika Anda ingin menyiapkan SAML 2.0 Idp untuk sebuah aplikasi yang ingin Anda integrasikan, maka
Anda harus mengkofigurasi dua buah file metadata, yaitu : saml20-idp-hosted.php and
saml20-sp-remote.php.
Mengkonfigurasi SAML 2.0 IdP Hosted Metadata
Berikut ini adalah konfigurasinya :
<?php
10
11. /**
* SAML 2.0 IdP configuration for simpleSAMLphp.
*
* See: https://rnd.feide.no/content/idp-hosted-metadata-reference
*/
$metadata['__DYNAMIC:1__'] = array(
/*
* The hostname of the server (VHOST) that will use this SAML entity.
*
* Can be '__DEFAULT__', to use this entry by default.
*/
'host' => '__DEFAULT__',
/* X.509 key and certificate. Relative to the cert directory. */
'privatekey' => 'server.pem',
'certificate' => 'server.crt',
/*
* Authentication source to use. Must be one that is configured in
* 'config/authsources.php'.
*/
'auth' => 'fosuserbundle-sql',
);
Mengkonfigurasi SAML 2.0 SP Remote Metadata
Pada file (saml20-sp-remote.php), Anda akan menambahkan tambahan entri konfigurasi untuk E-
Office. Berikut adalah contoh entri konfigurasinya :
11
12. Kalkun / Open Source Web Based SMS Management
....
phpBB3
...
CI-CMS2
....
MediaWiki
....
SugarCRM
....
Wordpress
....
Moodle
....
Google Apps
...
12
13. Melakukan Ujicoba untuk Login
Untuk melakukan ujicoba apakah sumber autentifikasi yang baru saja dibuat, bukalah alamat
http://idp.negeripelangi.wm, maka Anda akan mendapatkan halaman seperti berikut :
...
Masukkan password untuk manajemen IdP. Maka Anda akan mendapatkan halaman seperti berikut :
...
Buka tab Autentification, pilih default-sp, dan masukkan username dan password yang terdapat di
sumber autentifikasi yang Anda gunakan, jika berhasil maka akan terlihat tampilan seperti berikut :
Jika sudah berhasil, maka IdP Anda telah siap untuk digunakan.
Pertimbangan Keamanan
Untuk lebih meningkatkan keamanan, pastikan IdP Anda menggunakan HTTPS (SSL), dan pastikan
Anda telah mengganti certificate default yang disertakan dalam simpleSAMLphp dengan certificate
yang baru.
Dukungan
Jika Anda memerlukan bantuan dalam menyiapkan simpleSAMLphp sebagai IdP Anda dapat bertanya
di komunitas simpleSAMLphp, http://rnd.feide.no/content/simplesamlphp-users-mailinglist
13