indonesian security conference 2010 - oauth untuk pengamanan credentials pada akses rest api -...

15
1 OAuth untuk pengamanan credentials pada akses REST API Panggi Libersa Jasri Akadol , S.Kom Open Security Lab ( http://www.opensecuritylab.org ) Bandung , Indonesia [email protected] Abstrak OAuth adalah delegated authorization protocol . Dengan menggunakan protokol ini , seorang user dapat memberikan kuasa pada client untuk mengakses data terproteksinya yang berada di server tanpa harus menyerahkan username dan password . Autentikasi OAuth dikatakan three-legged karena ada tiga partisipan , yaitu : Service provider , OAuth consumer dan User. 1. Pendahuluan Mulai dari awal web platform diciptakan , hingga saat ini banyak terjadi perubahan . Dari yang awalnya hanya berupa teks dan tautan html statis , berkembang menjadi konten dinamis yang didukung oleh teknologi yang sifatnya juga berkembang seperti web services. Web service menyediakan standar komunikasi di antara berbagai aplikasi software yang berbeda-beda. Ia dapat berjalan di berbagai platform maupun framework. Dengan adanya web service kita dapat mengkomunikasikan berbagai software dari berbagai software dari berbagai mesin maupun platform yang berbeda. Perkembangan web service pun terjadi secara signifikan dan telah diciptakan beberapa arsitektur untuk keperluan tersebut. Salah satunya yang dibahas di sini adalah arsitektur REST. Dengan REST komunikasi yang terjadi bisa menjadi mudah antara penyedia dan peminta sumber daya. Namun , sumber daya ada yang terbuka sebagian dan ada yang terproteksi sehingga untuk melakukan akses ke sumber daya ( resources ) diperlukan autentikasi untuk mengenali peminta akses. Pada umumnya variabel autentikasi ( credentials ) yang digunakan adalah username dan password .

Upload: panggi-libersa-jasri-akadol

Post on 27-Jul-2015

632 views

Category:

Documents


4 download

DESCRIPTION

my paper at idsecconf2010 in Bahasa Indonesia

TRANSCRIPT

Page 1: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

1

OAuth untuk pengamanan credentials pada akses REST API

Panggi Libersa Jasri Akadol , S.Kom

Open Security Lab ( http://www.opensecuritylab.org ) Bandung , Indonesia [email protected]

Abstrak

OAuth adalah delegated authorization protocol . Dengan menggunakan protokol ini ,

seorang user dapat memberikan kuasa pada client untuk mengakses data terproteksinya

yang berada di server tanpa harus menyerahkan username dan password . Autentikasi

OAuth dikatakan three-legged karena ada tiga partisipan , yaitu : Service provider ,

OAuth consumer dan User.

1. Pendahuluan

Mulai dari awal web platform diciptakan , hingga saat ini banyak terjadi perubahan . Dari

yang awalnya hanya berupa teks dan tautan html statis , berkembang menjadi konten

dinamis yang didukung oleh teknologi yang sifatnya juga berkembang seperti web

services. Web service menyediakan standar komunikasi di antara berbagai aplikasi

software yang berbeda-beda. Ia dapat berjalan di berbagai platform maupun

framework. Dengan adanya web service kita dapat mengkomunikasikan berbagai

software dari berbagai software dari berbagai mesin maupun platform yang berbeda.

Perkembangan web service pun terjadi secara signifikan dan telah diciptakan beberapa

arsitektur untuk keperluan tersebut. Salah satunya yang dibahas di sini adalah arsitektur

REST.

Dengan REST komunikasi yang terjadi bisa menjadi mudah antara penyedia dan peminta

sumber daya. Namun , sumber daya ada yang terbuka sebagian dan ada yang

terproteksi sehingga untuk melakukan akses ke sumber daya ( resources ) diperlukan

autentikasi untuk mengenali peminta akses. Pada umumnya variabel autentikasi (

credentials ) yang digunakan adalah username dan password .

Page 2: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

2

Seiring dengan era keterbukaan di dunia maya , dimungkinkan antar aplikasi web untuk

saling berkomunikasi untuk meminta resources satu sama lain sehingga diperlukan

autentikasi untuk mengaksesnya. Contohnya adalah fasilitas dari aplikasi yang ingin

menggunakan akses ke twitter untuk memperoleh hasil seperti unggah gambar pada

http://twitpic.com . Untuk menjalankan aplikasi tersebut syarat utamanya ( sebelum

Basic Auth di hapus dari sistem twitter ) adalah menggunakan username dan password.

Bayangkan jika penyedia aplikasi itu menyimpan credentials kita tadi , dia bisa

melakukan take over account dan kita tidak bisa mendapatkan akun kita kembali karena

penyedia aplikasi telah memiliki kemampuan penuh terhadap resource yang ada.

Untuk itulah diciptakan OAuth , yang menggunakan token sebagai alat ganti username

dan password dan aksesnya pun bisa dibatasi atau bahkan aksesnya bisa di hapus

kapanpun kita mau tanpa ada rasa kawatir akun kita akan diambil oleh orang. Saat ini

telah banyak yang mengadopsi OAuth , antara lain Google , Yahoo! , twitter , facebook

dan banyak aplikasi web lainnya termasuk wepay.com yang bergerak di bidang online

payment.

2. Cara kerja OAuth secara umum

OAuth bergantung pada tiga set dari token dan secret yang didapat dari server dan

client:

1. Consumer key dan consumer secret

Consumer key adalah unique identifier untuk client yang digunakan client untuk

melakukan request untuk mendapatkan request tokens.

a. Contoh consumer key : T1NuLdkR9ACB4GBEOc1Qvw

b. Contoh consumer secret : RGwVY9zru6evNMez3iI4qLke9UYaW5RCgdx8kfyKKh

2. Request token dan Request token secret

Request token adalah temporary one-time identifier yang diberikan oleh server

untuk tujuan permintaan kepada user untuk melakukan grant permission pada

Page 3: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

3

client. Token secret digunakan untuk melakukan sign request untuk mendapatkan

sebuah access token.

3. Access token dan Access token secret

Access token adalah identifier untuk digunakan oleh client untuk melakukan akses ke

resources milik user. Sebuah client bisa melakukan akses ke resources milik user

selama token nya masih valid. Server bisa melakukan revoke kapanpun karena sudah

expire atau user melakukan revoke secara manual. Secret digunakan untuk sign

request ke resources yang di proteksi oleh akses user.

a. Contoh Access token :

45014365-GUPXF66BQ0t3nLFpT7rkLFPuXBGn4XbH5WyjCwXlu

b. Contoh Access token secret :

xQNMgYntxxj505w50XDHS0m0MU3NrquDOE2VUjUk

Menggunakan OAuth dapat melalui tahap-tahap berikut . Tujuan dari langkah-langkah

berikut adalah untuk mendapatkan access token dan secret. Server bisa mengizinkan

access token untuk jangka waktu tertentu dan / atau membatasi akses ke resources

tertentu milik user saja.

1. Client melakukan request ke server menggunakan sebuah consumer key

2. Client menggunakan consumer key untuk mendapatkan sebuah request token dan

secret.

3. Client melakukan redirect pada user ke server untuk grant permission untuk client

melakukan akses ke resources milik user. Proses ini bisa terjadi jika request token

telah diautentikasi.

4. Client melakukan request ke server untuk memberikan access token dan secret .

Ianya merepresentasikan sebuah identifier dan shared secret yang client nya bisa

gunakan untuk mengakses resources atas nama user.

5. Ketika membuat sebuah request untuk akses ke resource terproteksi , client

menyertakan Authorization header yang berisi consumer key, access token ,

signature method dan sebuah signature , timestamp , sebuah nonce , dan untuk

opsionalnya adalah versi dari OAuth yang digunakan.

Page 4: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

4

Gambar 1. OAuth Flow

3. Contoh cara kerja OAuth secara detail

Diasumsikan server membuatkan a1191fd420e0164c2f9aeac32ed35d23 sebagai sebuah

consumer key dan fd9b9d0f769c3bcc548496e4b5077da79c02d7be sebagai consumer

secret. Disisi client , untuk berhubungan dengan server oauth , ianya harus melakukan

akses ke URI berikut ( menggunakan SSL atau TLS untuk komunikasi ) :

1. Sebuah URI untuk mendapatkan request tokens , contoh :

https://api.twitter.com/oauth/request_token

2. Sebuah URI untuk mendapatkan autorisasi user , contoh :

https://api.twitter.com/oauth/authorize

3. Sebuah URI untuk mendapatkan sebuah access token , contoh :

https://api.twitter.com/oauth/access_token

Parameter yang diperlukan saat melakukan request :

1. oauth_consumer_key : merupakan unique identifier yang dibuatkan oleh server

untuk setiap client.

2. oauth_signature_method : ini adalah metode untuk melakukan sign ketika

melakukan komputasi sebuah signature. OAuth menggunakan HMAC-SHA1 dan RSA-

SHA1 sebagai metode untuk sign. Ketika client dan server menggunakan TLS ,

dimungkinkan untuk menggunakan metode PLAINTEXT yaitu text biasa tanpa

enkripsi , namun ada baiknya menggunakan antara HMAC-SHA1 atau RSA-SHA1.

Page 5: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

5

3. oauth_timestamp : ini adalah jumlah detik sejak tanggal 1 Januari 1970 , 00:00:00

GMT

4. oauth_nonce : ini adalah string acak yang unique untuk semua requests yang

dikirimkan sesuai dengan oauth_timestamp . Parameter ini membantu server

mengatasi serangan replay . Tidak seperti pada digest authentication , OAuth

membutuhkan clients untuk membangkitkan nilai nonce.

5. oauth_version : ini adalah versi dari OAuth , yang saat ini versi stabilnya adalah 1.0

Langkah pertama yang dilakukan oleh client adalah melakukan submit sebuah request

untuk mendapatkan sebuah request token dan secret dari server. Signature pada request

ini berdasarkan pada consumer secret yang client dapatkan bersama consumer key.

Signature menyertakan oauth_consumer_key , oauth_signature_method,

oauth_timestamp , oauth_nonce , dan oauth_version dan harus di komputasi seperti

berikut :

1. Didapatkan parameter oauth_consumer_key , oauth_signature_method,

oauth_timestamp, oauth_nonce, dan oauth_version.

2. Percent-encode parameter-parametaenya dan urutkan dulu sesuai nama lalu

sesuai nilainya.

3. Konkatenasi parameter menjadi sebuah string seperti disaat melakukan komputasi

sebuah aplikasi / x-www-form-urlencoded string . Pada contoh kali ini , nilai dari

string adalah

oauth_consumer_key=a1191fd420e0164c2f9aeac32ed35d23&oauth_nonce=1098

43dea839120a&oauth_signature_method=HMAC-SHA1&oauth_timestamp=

1258308730&oauth_version=1.0.

4. Komputasi sebuah signature menggunakan shared secret . Untuk contoh disini

adalah d8e19bb988110380a72f6ca33b2ba5903272fe1.

5. Lakukan base64-encode pada signature , dan setelah itu lakukan percent-encode

dari text.

Page 6: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

6

Menggunakan signature ini , consumer mengirimkan sebuah request untuk

mendapatkan sebuah request token.

# Request untuk mendapatkan request token

POST /request_token HTTP/1.1 [1]

Host: api.twitter.com

Authorization: OAuth realm="http://api.panggi.net/photos",

oauth_consumer_key=a1191fd420e0164c2f9aeac32ed35d23,

oauth_nonce=109843dea839120a,

oauth_signature=d8e19bb988110380a72f6ca33b2ba5903272fe1,

oauth_signature_method=HMAC-SHA1,

oauth_timestamp=1258308730,

oauth_version=1.0 [2]

Content-Length: 0

# Response berisi sebuah request token dan secret

HTTP/1.1 200 OK

Content-Type: application/x-www-form-urlencoded

oauth_token=0e713d524f290676de8aff4073b1bb52e37f065c

&oauth_token_secret=394bc633d4c93f79aa0539fd554937760f05987c [3]

Keterangan :

[1] Request untuk mendapatkan sebuah request token dan secret

[2] Authorization header untuk mengautentikasi client

[3] Response berisi sebuah request token dan sebuah secret

oauth_token di response adalah sebuah request_token yang client harus gunakan untuk

mendapatkan izin dari user. Client lalu melakukan redirect pada user untuk mengunjungi

resource pada server untuk grant authorization.

# Request untuk mendapatkan authorization

GET /oauth/authorize?oauth_token=0e713d524f290676de8aff4073b1bb52e37f065c

HTTP/1.1

Host: api.twitter.com

Page 7: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

7

Implementasi dari resource tergantung pada server . Pada titik ini , server akan

melakukan pengecekan apakah user telah terautentikasi dengan server. Server bisa

mengizinkan user untuk memilih bagian dari data yang daoat client akses dan sifat dari

akses tersebut. Contohnya, user bisa memberikan izin ke client untuk melakukan edit

data atau membuat data baru tetapi tidak mengizinkan penghapusan data. Jika client

memiliki antarmuka berbasis web , server bisa meredirect user ke antarmuka client

melalui callback URI . Jika tidak , server akan meminta user memasukkan kode verifikasi

pada antarmuka pengguna.

Client menggunakan kode verifikasi untuk mendapatkan sebuah access token . Signature

pada request adalah didasarkan pada oauth_consumer_key , request_token , kode

verifikasi , oauth_signature_method , oauth_timestamp , oauth_nonce , dan

oauth_version.

# Request untuk mendapatkan an access token

POST /access_token HTTP/1.1 [1]

Host: api.panggi.net

Authorization: OAuth

oauth_consumer_key="a1191fd420e0164c2f9aeac32ed35d23",

oauth_token="ad0d1c7a765c9e6e8b14e639c763177312d18e7e",

oauth_verifier="988786765423",

oauth_signature_method="RSA-SHA1",

oauth_signature="698d58fd3316304181e11c6eb8127ffea7e2df46",

oauth_timestamp="1258328458",

oauth_nonce="109843dea839120a",

oauth_version="1.0" [2]

Content-Length: 0

HTTP/1.1 200 OK

Content-Type: application/x-www-form-urlencoded

oauth_token=8d743f1165c7030177040ec70f16df8bc6f415c7

&oauth_token_secret=95aec3132c167ec2df818770dfbdbd0a8b2e105e [3]

Page 8: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

8

Keterangan :

[1] Request untuk mendapatkan sebuah access token dan secret

[2] Authorization header untuk mengautentikasi client

[3] Response berisi sebuah access token dan token secret

Response ini berisi sebuah access token dan sebuah secret . Server harus melakukan

verifikasi bahwa request token cocok dengan consumer key sebelum memberikan access

token. Client menggunakan nilai-nilai tersebut untuk membuat sebuat Authorization

header dengan requestnya untuk mengakses protected resources dari user tersebut.

Signature di request ini berdasarkan pada oauth_consumer_key , access token ,

oauth_signature_method , oauth_timestamp , oauth_nonce , dan oauth_version dengan

parameter query di URI pada body dari request ketika request media type adalah

application/x-www-form-urlencoded

# Request

POST /albums/2009/08/1011/duplicate;t=a5d0e32ddff373df1b3351e53fc6ffb1

HTTP/1.1

Host: api.twitter.com [1]

Authorization: OAuth

oauth_consumer_key="a1191fd420e0164c2f9aeac32ed35d23",

oauth_token="827fa00c6f15db4063378bb988e1563e0c318dbc",

oauth_signature_method="RSA-SHA1",

oauth_signature="f863cceebb4f1fe60739b125128e7355dcbf14ea",

oauth_timestamp="1258328889",

oauth_nonce="3c93e7fdd1101e515997abf84116ef579dccce1a",

oauth_version="1.0" [2]

Keterangan :

[1] Request untuk mengakses sebuah protected resource

[2] Request berisi sebuah Authorization header menggunakan access token dan token

secret .

Page 9: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

9

4. REST

Representational State Transfer atau REST secara umum berarti bahwa setiap unique

URL adalah representasi dari objek. Konten dari objek tersebut bisa didapatkan dengan

melakukan HTTP request berupa GET , dan untuk melakukan modifikasi pada objek bisa

digunakan metode POST , PUT , atau DELETE.

Gambar 2. Struktur Desain REST

5. Contoh Penerapan pada Twitter

5.1 API Twitter

API adalah singkatan dari Application Programming Interface yang jika dijelaskan secara

singkat merupakan sesuatu yang seperti antarmuka pengguna , tetapi content yang

diberikan dirancang agar mudah bagi perangkat keras untuk membaca dan

menggunakannya ( parsing dan processing ).

API tidak hanya membuat kemudahan dalam melakukan pembacaan dan penggunaan ,

tetapi juga untuk akses secara remote . Dengan API twitter , hanya dengan melakukan

request URL sederhana dengan sedikit parameter HTTP POST , dimungkinkan untuk

melakukan status update dan direct message.

Page 10: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

10

Gambar 3. Contoh REST API pada twitter

API twitter didesain menggunakan arsitektur REST ( Representational State Transfer )

yang bila diartikan secara sederhana adalah API yang menggunakan HTTP request

seperti GET , PUT , POST dan DELETE untuk berkomunikasi dan request data ke server

secara straightforward seperti mengakses halaman web.

5.2 Jenis API Twitter

Ada empat jenis API yang bisa digunakan di twitter antara lain :

1. API General yang berisi tentang fungsionalitas umum dari twitter

2. API Search yang berisi tentang fungsionalitas pencarian

3. API Streaming yang berisi akses near-realtime ke public timeline

4. API @Anywhere yang berisi akses ke penggunaan twitter platform yang

diintegrasikan ke situs.

5.3 HTTP Request , HTTP Response Status Code dan Kesalahan

Selain HTTP request yang berupa GET , POST , DELETE dan PUT , ada pula yang dinamakan

HTTP response yaitu balasan dari server sebagai respon dari permintaan.

Page 11: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

11

1. HTTP Request

Secara default HTTP request itu memiliki banyak parameter antara lain HEAD , GET ,

POST , PUT , DELETE , TRACE , OPTIONS , CONNECT dan PATCH . Namun API twitter

mendukung hanya GET , POST , DELETE dan PUT. Berikut penjelasannya :

1. GET : meminta sebuah representasi dari resource yang dispesifikasikan

2. POST : melakukan submit data untuk diproses ke resource yang diidentifikasikan

3. DELETE : melakukan penghapusan ke resource yang diidentifikasikan

4. PUT : melakukan unggah sebuah representasi dari resource yang dispesifikasikan

2. HTTP Response

1 . 200 OK : segalanya berhasil

2 . 304 Not Modified : tidak ada perubahan semenjak permintaan terakhir

3 . 400 Bad Request : ada kesalahan di permintaan

4 . 401 Not Authorized : tidak memiliki akses

5 . 403 Forbidden : update telah melewati limit yang telah ditetapkan

6 . 404 Not Found : resource yang diinginkan tidak ditemukan

7 . 406 Not Acceptable : API search memberikan Status ini jika melakukan request

dengan format yang tidak valid atau tidak didukung

8 . 420 Rate Limited : Rate limit telah terlewati

9 . 500 Internal Server Error : ada kesalahan di server twitter

10 . 502 Bad Gateway : Twitter sedang down untuk maintainance

11 . 503 Service Unavailable : Twitter sedang overloaded sehingga permintaan tidak bisa

diproses

Page 12: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

12

a. Mendaftarkan Aplikasi di twitter

Untuk memulai menggunakan API twitter , diharuskan untuk mendaftarkan terlebih

dahulu dengan langkah sebagai berikut :

1. Melakukan akses ke http://dev.twitter.com/apps/new

2. Mengisi hal-hal yang diperlukan yaitu :

a. Application name : nama aplikasi

b. Description : deskripsi aplikasi

c. Application Website : alamat website dari aplikasi

d. Organization : organisasi pemilik aplikasi

e. Application type : tipe aplikasi yaitu Client atau Browser

f. Callback URL : alamat URL untuk di redirect setelah akses disetujui

g. Default Access Type : berupa “Read & Write” atau “Read Only”

h. Application Icon : Icon untuk aplikasi

i. Captcha : form yang harus diisi untuk memastikan bahwa yang membuat adalah

manusia

3. Setelah pembuatan/pendaftara aplikasi selesai maka akan diberikan Consumer key ,

Consumer secret , API key , Access Token dan Access Token Secret yang akan

dijelaskan di bagian analisis OAuth.

5.5 Cara Kerja OAuth di Twitter

Ketika pengunjung datang ke halaman login , aplikasi mengirimkan request GET ke

server twitter melalui sebuah set kode request. Kode request ini digunakan untuk

verifikasi user pada website twitter.

User lalu di dibawa ke halaman twitter untuk melakukan allow atau deny untuk akses

aplikasi. Jika user melakukan allow pada aplikasi , maka user akan dibawa kembali ke

alamat aplikasi. URL tempat user akan dipindahkan telah berisi token OAuth yang akan

Page 13: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

13

digunakan di langkah selanjutnya. Urutan cara kerja OAuth pada twitter adalah sebagai

berikut:

1. User melakukan akses pada aplikasi , aplikasi menghubungi twitter untuk

mendapatkan one-time Request Token.

Gambar 4. Cara kerja OAuth-01

2. Twitter membalas dengan Request Token dan Request Token Secret Key. Request

Token digunakan untuk membuat authorization link, dan Request Token Secret

digunakan untuk memberitahu twitter bahwa user adalah yang asli melakukan

request untuk Request Token.

Gambar 5. Cara Kerja OAuth-02

3. User melakukan klik pada authorization link yang baru dibangkitkan, dibuat dengan

Request Token. Link melakukan redirect ke Twitter, dan API call melakukan pass

Request Token Secret.

Page 14: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

14

Gambar 6. Cara Kerja OAuth-03

4. Twitter memberi prompt kepada user untuk melakukan allow untuk akses aplikasi.

Jika user melakukan konfirmasi , Twitter mengirimkan user kembali ke alamat

aplikasi dengan Access Token dan Access Token Secret key . Token key/pair adalah

unique untuk setiap user dan tidak berubah. Token key/pair ini bisa disimpan di

database untuk keperluan mendatang.

Gambar 7. Cara Kerja OAuth-04

DAFTAR PUSTAKA

[1] Allamaraju Subbu, RESTful Web Services Cookbook, O’Reilly YAHOO! PRESS, 223 – 228, 2010. [2] R.T.Fielding, Architectural Styles and the Design of Network-based Software Architectures, UNIVERSITY OF CALIFORNIA, 76-85, 2000. [3] E. Hammer-Lahav, The OAuth 1.0 Protocol, Internet Engineering Task Force (IETF), 2010.

Page 15: Indonesian Security Conference 2010 - OAuth Untuk Pengamanan Credentials Pada Akses REST API - Panggi Libersa Jasri Akadol

15

[4] W. Abraham, The first PHP Library to support OAuth for Twitter's REST API, 2010. http://github.com/abraham/twitteroauth , 20 Maret 2010, 04.30 WIB. [5] JSON Team, Pengenalan JSON, 2010. http://json.org/json-id.html , 26 Maret 2010, 16.32 WIB.