Skip to main content

Keycloak untuk Mengelola identitas dan Hak Akses Users


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:

  1. The pure identity function: Tanpa memperhatikan  hak akses   untuk  membuat, mengelola,dan menghapus.
  2. The user akses(log-on) function: Contohnya, untuk masuk pada sebuah layanan atau kumpulan layanan dengan menggunakan  smart card.
  3. The service function: Untuk users dan perangkat mereka sistem memberikan kemampuan personalized, role-based, online, on-demand, multimedia(content) dan presence-based services.
  4. 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.

mvn io.quarkus:quarkus-maven-plugin:1.7.3.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=security-keycloak-authorization-quickstart \
    -Dextensions="oidc, keycloak-authorization, resteasy-jsonb"

src/main/java/com/beanary/security/authorization/keycloak/UsersResource.java 

package com.beanary.security.keycloak.authorization;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.resteasy.annotations.cache.NoCache;

import io.quarkus.security.identity.SecurityIdentity;

@Path("/api/users")
public class UsersResource {

    @Inject
    SecurityIdentity identity;

    @GET
    @Path("/me")
    @Produces(MediaType.APPLICATION_JSON)
    @NoCache
    public User me() {
        return new User(identity);
    }

    public static class User {

        private final String userName;

        User(SecurityIdentity identity) {
            this.userName = identity.getPrincipal().getName();
        }

        public String getUserName() {
            return userName;
        }
    }
}

src/main/java/com/beanary/security/authorization/keycloak/AdminResource.java

package com.beanary.security.keycloak.authorization;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import io.quarkus.security.Authenticated;

@Path("/api/admin")
@Authenticated
public class AdminResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String admin() {
        return "granted";
    }
}

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

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....