Keycloack adalah sebuah perangkat lunak server open source yang berfungsi untuk melakukan proses authentikasi dan juga identifikasi user. dengan Keycloack server kita dapat menambahkan fitur authentikasi pada layanan sistem kita dengan lebih cepat dan aman.
"Sebuah catatan Belajar"
IAM (Identity Access Management)
IAM atau IdM(Identity Management) adalah sebuah framework yang digunakan untuk melakukan authentikasi pada user untuk mengetahui identititas and privileges/hak aksesnya. Perangkat lunak ini mengecek apakah para pengguna memiliki akses pada files, networks and sumber daya lainnya yang ada di server yang diminta oleh para users tersebut. Perangkat lunak ini juga berguna untuk mengecek bagaimana dan oleh siapa informasi dapat diakses dan dimodifikasi dengan menggunakan informasi dari users yang meminta akses. IAM systems memberikan perlengkapan dan teknologi pada administrators untuk merubah role dari si users, dan memeastikan user bekerja sesuai dengan perannya.
Identity Management memiliki empat fungsi-fungsi dasar:
- The pure identity function: Tanpa memperhatikan hak akses untuk membuat, mengelola,dan menghapus.
- The user akses(log-on) function: Contohnya, untuk masuk pada sebuah layanan atau kumpulan layanan dengan menggunakan smart card.
- The service function: Untuk users dan perangkat mereka sistem memberikan kemampuan personalized, role-based, online, on-demand, multimedia(content) dan presence-based services.
- Identity Federation: Untuk melakukan authentikasi seorang pengguna tanpa mengetahui passwordnya dapat dilakukan dengan mengunakan federated identity.
Single Sign-On
Single sign-on (SSO) adalah sebuah property dari access control untuk multiple related dan independent software systems agar supaya user dapat login dengan menggunakan sebuah ID and password untuk memperoleh access pada system/s yang terkait tanpa harus menggunakan usernames or passwords yang berbeda.
Keycloack
Keycloak adalah sebuah software open source untuk melakukan identity dan access management yang secara umum ditujukan untuk applications dan services. Users dapat di-authenticate dengan menggunakan Keycloak daripada didalam masing-masing applikasi. Maka, applications tidak harus mengurusi login forms-nya sendiri dalam meng-authenticating users dan menyimpan users. sekali user berhasil login ke Keycloak, maka user tidak perlu login lagi pada applications yang lain. begitu pula dengan sign-out.
Quarkus dan Keycloack
Pada catatatn ini menjelaskan tentang bagaimana applikasi berbasis Quarkus dapat melakukan authorize dengan sebuah bearer token access untuk melindungi resources diserver menggunakan Keycloak Authorization Services.
Ektensi quarkus-keycloak-authorization dibuat berdasarkan pada quarkus-oidc dan memberikan kemampuan policy enforcer yang mengatur access pada protected resources berdasarkan permissions yang dikelola olah Keycloak dan juga dapat digunakan bersamaan dengan Quarkus service yaitu: OIDC applications. Hal ini memberikan kemampuan authorization yang flexible dan dynamic berdasarkan pada Resource-Based Access Control. Dengan kata lain, daripada secara langsung mengatur access based pada beberapa mekanisme access control tertentu (misal.: RBAC), kita hanya perle mengecek apakah boleh apa tidak sebuah request untuk mengakses a resource berdasarkan identitasnya.
Dengan menaruh authorization diluar dari applikasi atau service utama, maka kita bisa melindungi applications dengan berbagai mekanisme access control yang berbeda juga untuk menghindari re-deploying application setiap saat security requirements berubah, disini Keycloak akan berfungsi sebagai sebuah authorization service terpusat dimana protected resources dan associated permissions dapat dikelola.
Kita akan membuat 2 buah endpoints sederhana:
/api/users/me
/api/admin
Kedua endpoints ini terlidungi dan hanya dapat diakses jika user menyertakan sebuah bearer token pada request yang dilakukan, dan tentunya harus valid (signature, expiration dan audience) dan juga trusted.
Bearer token sendiri dibuat oleh sebuah Keycloak Server dan merepresentasikan subject pada siapa dan untuk apa token tersebut dibuat. Dengan spesifikasi OAuth 2.0 Authorization Server, sang token ini juga mereferensi tentang siap user ini.
Pada endpoint /api/users/me akses didapat oleh user yang memiliki token yang valid. Sebagai response, sebuah JSON document dengan informasi details tentang si user yang mana details tersebut diperoleh dari informasi yang ada dalam token itu sendiri. Endpoint ini dilindungi oleh RBAC (Role-Based Access Control) dan hanya user yang berhak yang memiliki role: user yang dapat meng akses endpoint ini.
Pada endpoint /api/admin endpoint dilindungi dengan menggunakan RBAC (Role-Based Access Control) dan hanya user yang memiliki role admin yang bisa mengakses.
Buat Quarkus Project
Buat Quarkus project dengan Maven melalui perintah dibawah ini.
src/main/java/com/beanary/security/authorization/keycloak/UsersResource.java
src/main/java/com/beanary/security/authorization/keycloak/AdminResource.java
Docker Run Keycloak
docker run -p 8180:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:11.0.2
http://localhost:8180/auth/realms/quarkus
Import Realm Quarkus
File untuk diimport quarkus-realm.json.
Jalankan Quarkus Dev Mode
./mvnw clean compile quarkus:dev
Install JQ
sudo apt install jq
Request Bearer Token
export access_token=$(curl -X POST http://localhost:8180/auth/realms/quarkus/protocol/openid-connect/token --user backend-service:secret -H 'content-type: application/x-www-form-urlencoded' -d 'username=alice&password=alice&grant_type=password' | jq --raw-output '.access_token' )
Request Protected Server Endpoint
curl -v -X GET http://localhost:8080/api/users/me -H "Authorization: Bearer "$access_token
Sumber
https://www.comakeit.com/blog/quick-guide-using-keycloak-identity-access-management
https://quarkus.io/guides/security-keycloak-authorization
Comments
Post a Comment