Wednesday, April 27, 2016

Sosial Plugin

Sosial plugin adalah sebuah atau seperangkat program aplikasi tambahan yang berisi fungsi script yang memberikan fitur-fitur atau layanan yang spesifik untuk meningkatkan fungsi dalam penggunaan website dengan menghubungkan suatu media sosial dengan website tersebut.
Jika kita pernah melihat website yang menggunakan sistem login dengan menggunakan akun media sosial seperti Twitter, Facebook, Google+, Yahoo, dll. Maka kita dapat login pada website tersebut tanpa harus melakukan registrasi terlebih dahulu. Contoh, kita dapat memberi komentar pada artikel yang ada pada suatu website tanpa harus registrasi dengan website tersebut, melainkan hanya dengan memanfaatkan akun media sosial kita untuk login.
Hal ini dapat terjadi karena website media sosial tersebut menyediakan service yang memungkinkan sistem lain menggunakan akun mereka untuk login. Website media sosial bertindak sebagai server, sedangkan website yang melakukan login tanpa harus registrasi bertindak sebagai client.
pada artikel ini, saya akan mencoba memaparkan cara membuat web service sederhana dengan studi kasus proses login menggunakan PHP dan MySQL.
Adapun skenario dari contoh kasus yang saya ambil di sini adalah andaikan terdapat dua buah sistem yang saling independen, katakanlah A dan B. Sistem A ini andaikan berada pada URL http://sistem-a. Di dalam sistem A ini, terdapat data user yang terdiri dari username dan password. Sedangkan di dalam sistem B pada URL http://sistem-b terdapat sistem login yang nantinya memanfaatkan user dan password yang ada di sistem A.
Ide untuk mengimplementasikan skenario di atas adalah: sebuah script harus diletakkan di dalam sistem B untuk memproses form login. Dalam proses login, script tersebut mengirim username dan password ke sistem A untuk dicek validitasnya melalui GET Request dengan parameter username dan password yang dibaca dari form login. Selanjutnya di dalam sistem A terdapat script untuk membaca username dan password yang berasal dari GET request dari sistem B untuk diproses validitasnya. Sebagai responnya, sistem A akan mengenerate sebuah dokumen XML yang di dalamnya terdapat sebuah data misalkan berbentuk TRUE atau FALSE. Bernilai TRUE jika username dan password tersebut valid, dan FALSE jika tidak valid. Selanjutnya di sistem B respon tersebut dibaca, jika data yang dibaca bernilai TRUE maka proses login berhasil dan jika FALSE maka login gagal.
Selain XML, bentuk respon yang berasal dari server dapat berupa bentuk JSON karena dengan dokumen JSON struktur entitas data juga dapat dibaca dengan jelas seperti halnya XML.
Tahap implementasi ide di atas ke dalam bentuk script PHP
Pertama kita buat script untuk web service yang nantinya diletakkan di sistem A. Script ini nanti berfungsi untuk menangkap atau membaca GET request berupa data username dan password dari sistem lain, memproses validitasnya dan akhirnya menggenerate response dalam bentuk XML.

CREATE TABLE `user` (
  `username` varchar(20),
  `password` varchar(20),
  PRIMARY KEY  (`username`)
)

dan berikut ini beberapa sampel datanya

INSERT INTO `user` VALUES ('user1', 'password1');
INSERT INTO `user` VALUES ('user2', 'password2');

Dalam sampel data username di atas, password tidak dienkrip supaya terlihat ketika uji coba proses loginnya. Namun dalam implementasi yang sesungguhnya, sebaiknya dienkripsi.
Buat script dengan nama service.php
<?php

// koneksi ke database di sistem A
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// membaca username dari GET request
$user = $_GET['username'];
// membaca password dari GET request
$pass = $_GET['password'];

// membaca data password user berdasar usernamenya
$query = "SELECT * FROM user WHERE username = '$user'";
$hasil = mysql_query($query);
$data  = mysql_fetch_array($hasil);
$password = $data['password'];

// mencocokkan password user dari db dan dari GET request
// jika cocok, maka responnya TRUE, jika tidak cocok responnya FALSE
if ($pass == $password) $response = "TRUE";
else $response = "FALSE";

// membuat header dokumen XML
header('Content-Type: text/xml');
echo "<?xml version='1.0'?>";

// membuat tag data respon pada dokumen XML
echo "<data>";
echo "<response>".$response."</response>";
echo "</data>";
?>

Berikut ini adalah tampilan dokumen XML sebagai respon dari sistem A jika kita berikan GET request melalui URL

http://sistem-a/service.php?username=user1&;password=xxxxx

Selanjutnya, buat script di sistem B untuk proses login termasuk form loginnya dengan file php dan html dengan nama index.html dan login.php
Index.html
<h1>Form Login</h1>
<form method="post" action="login.php">
<table>
  <tr><td>Username</td><td><input type="text" name="username"></td></tr>
  <tr><td>Password</td><td><input type="password" name="password"></td></tr>
  <tr><td></td><td><input type="submit" name="submit" value="Submit"></td></tr>
</form>


Kemudian pada script login.php

<?php

// membaca username dari form login
$username = $_POST['username'];
// membaca password dari form login
$password = $_POST['password'];

// membuat URL GET request ke sistem A
$url = "http://sistem-a/service.php?username=".$username."&password=".$password;

// mengirim GET request ke sistem A dan membaca respon XML dari sistem A
$bacaxml = simplexml_load_file($url);

// membaca data XML hasil dari respon sistem A
foreach($bacaxml->response as $respon)
{
  // jika responnya TRUE maka login sukses
  // jika FALSE maka login gagal
  if ($respon == "TRUE") echo "Login Sukses";
  else if ($respon == "FALSE") echo "Login Gagal";


?>

Keterangan:
Untuk membaca dan memparsing data XML yang diterima dari sistem A kita bisa menggunakan function 
simplexml_load_file().
Untuk mencoba 2 file di atas, kita dapat mencoba script di atas melalui localhost (PC lokal) dan hosting. Misalkan localhost adalah sistem B nya dan hostingnya adalah sistem A nya. Jadi, Anda buat database user dan script service.php nya di hosting, dan script form loginnya di localhost. Selanjutnya hanya tinggal mengubah URL web servicenya ke URL hosting.
Sekarang sistem di atas sebenarnya sudah berjalan, namun keamanannya masih rawan bila menggunakan GET request seperti di atas. Artinya bisa saja ada sistem lain katakanlah C yang sebenarnya tidak berhak mengakses web service ke sistem A yang menggunakan service tersebut untuk sistem loginnya. Jika demikian maka kita perlu memproteksi GET request tersebut dengan menggunakan kode API. Kode API ini diberikan oleh sistem A kepada sistem B atau sistem yang berhak mengakses web servicenya. Kode API berfungsi sebagai password dalam melakukan GET request. Jika kode API yang dikirim melalui GET request oleh suatu sistem tidak dikenal oleh sistem A berarti sistem tersebut tidak berhak mengakses web servicenya.
Untuk mengimplementasikan kode API sebagai pengaman GET request dalam web service, kita sedikit memodifikasi script di atas, baik di script service.php (di sistem A) maupun di login.php nya (di sistem B). Dalam contoh ini, kode API yang diberikan kepada sistem B oleh sistem A ini berbentuk string ’1234′, maka script service.php nya adalah

<?php

// koneksi ke database di sistem A
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// membaca username dari GET request
$user = $_GET['username'];
// membaca password dari GET request
$pass = $_GET['password'];
// membaca kode API dari GET request
$api = $_GET['api'];

// jika kode API nya '1234' maka lakukan proses validasi username dan password
// jika kode API nya salah, maka proses validasi tidak dilakukan (diberikan respon "FALSE")
if ($api == "1234")
{
   // membaca data password user berdasar usernamenya
   $query = "SELECT * FROM user WHERE username = '$user'";
   $hasil = mysql_query($query);
   $data  = mysql_fetch_array($hasil);
   $password = $data['password'];

   // mencocokkan password user dari db dan dari GET request
   // jika cocok, maka responnya TRUE, jika tidak cocok responnya FALSE
   if ($pass == $password) $response = "TRUE";
   else $response = "FALSE";
}
else $response = "FALSE";

// membuat header dokumen XML
header('Content-Type: text/xml');
echo "<?xml version='1.0'?>";

// membuat tag data respon pada dokumen XML
echo "<data>";
echo "<response>".$response."</response>";
echo "</data>";
?>

Selanjutnya di sistem B, script login.php nya perlu kita ubah parameter GET requestnya

<?php

// membaca username dari form login
$username = $_POST['username'];
// membaca password dari form login
$password = $_POST['password'];

// membuat URL GET request ke sistem A
$url = "http://sistem-a/service.php?username=".$username."&password=".$password."&api=1234";

// mengirim GET request ke sistem A dan membaca respon XML dari sistem A
$bacaxml = simplexml_load_file($url);

// membaca data XML hasil dari respon sistem A
foreach($bacaxml->response as $respon)
{
  // jika responnya TRUE maka login sukses
  // jika FALSE maka login gagal
  if ($respon == "TRUE") echo "Login Sukses";
  else if ($respon == "FALSE") echo "Login Gagal";
?>

Demikian cara pengaplikasian kode API dalam web service.
Penerapan web service tidak selalu dalam sistem login seperti di atas, namun bisa juga untuk keperluan lain, misalkan yang digunakan oleh Google Map dimana kita bisa menyisipkan peta dari Google Map ke dalam situs atau blog kita, atau kita dapat membagikan suatu artikel yang berada di suatu website untuk di posting dalam media sosial.


Sumber: http://script.klatenweb.com/


No comments:

Post a Comment