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

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android