Sunday, September 17, 2017

Membuat dan Mengakses OAuth2 protected content dengan OAG

Setelah penjelasan saya sebelumnya mengenai pembuatan OAuth2 Server, sekarang saya akan menjelaskan bagaimana cara pembuatan OAuth2 Protected Content, dan cara mengakses OAuth2 Protected Content dengan OAG.

Seperti sebelumnya untuk penjelasan kali ini saya akan menggunakan client credentials grant untuk mendapatkan access token karena lebih mudah dan simple untuk dijelaskan.

Untuk membuat OAuth2 protected content, kita dapat satu filter khusus yaitu Validate Access Token, bila mengikuti penjelasan saya sebelumnya dengan meng-import template, kita dapat melihat  policy yang terletak pada  Policies > OAuth 2.0 > Resource Service > Resource Service untuk melihat flow pembuatan OAuth2 protected content.

Pembuaan OAuth2 Protected Content

perlu diperhatikan dalam Validate Access Token kita perlu mengeset tempat penyimpanan access token, tempat penyimpanan access token ini harus sama dengan tempat penyimpanan access token pada access token grant yang memberikan access token (dalam hal ini tempat penyimpanan access token yang digunakan pada policy Client Credentials) dan harus menambahkan scope dari scope yang diberikan OAuth2 Authorization Server. untuk pengetesan dalam pengambilan OAuth2 Protected Content dengan command berikut:

curl -X POST \'{Protocol}://{host}:{port}{path}' \
  -H 'authorization: Bearer {access token yang didapat dari access token grant}'

tentu saja seperti sebelumnya path harus disesuaikan dengan path yang didaftarkan di OAG Policy Studio

Mengakses OAuth2 Protected Content dengan Postman


Sekarang kita akan mencoba mengakses OAuth2 protected Content, hal ini akan cukup sulit bila kita harus mengambil access token terlebih dahulu dengan meng-encode base64 client id dan secret, lalu menyimpan access token yang didapat untuk dimasukkan kedalam authorization header. OAG memberikan solusi agar semua hal tersebut dapat dilakukan oleh OAG tanpa campur tangan dari user.

Hal pertama yang harus dilakukan adalan dengan membuat client credentials profile, hal ini akan memudahkan kita agar tidak perlu lagi meng-encode base64 client id dan secret untuk mendapatkan access token. Client Credentials Profile ini terletak pada External Connections > Client Credentials > OAuth2, dalam pembuatannya kita akan memberikan nama pada profile ini dan menentukan authorization url dan juga token url. karena saya menggunakan template yang sudah di-import disini saya akan menggunakan API Gateway Profile. (Agar lebih mudah gunakan sertifikat yang benar untuk ssl pada protokol https atau buat listener baru dengan protokol http dan ganti URL client client credentials profile)

API Gateway Profile

Setelah membuat profile, klik tombol add pada tab OAuth2 Credentials, masukan nama kredensial, client id dan secret, ganti OAuth Flow Type ke Client Credentials, terakhir optional masukkan scope seperlunya, dan klik OK.

Sekarang kita akan membuat policy untuk mengakses OAuth2 Protected Content, dalam policy ini kita akan menggunakan 3 filter berikut:

1. Retrieve OAuth Client Access Token From Token Storage
Untuk mengecek apakah access token sudah ada atau masih hidup

2. Get OAuth Access Token
Untuk meminta access token baru dan menyimpannya di cache, token yang sudah expired akan langsung dibuang oleh cache

3. Connect to URL
Untuk meneruskan data ke OAuth2 Protected Content

pada ketiga filter tersebut kita harus mengganti isian client credentials profile dengan data client credentials profile yang baru saja kita buat. pada Retrieve OAuth Client Access Token, isian terletak pada  "Choose profile to be used for token request", pada Get OAuth Access Token pada "Optionally select a client credentials profile", dan pada Connect to URL pada "Choose a Client Credential Profile" pada tab Authentication.

Policy baru untuk mengakses OAuth2 Protected Content.

Daftarkan policy tersebut ke listener, lalu mari kita test dengan command:

curl -X POST \'{Protocol}://{host}:{port}{path}'

Testing dengan postman tanpa penggunaan authorization header

Sekian penjelasan saya untuk kali ini,

Terimakasih.

No comments:

Post a Comment