GithubHelp home page GithubHelp logo

hermes-keycloak-image's Introduction

Hi, I'm Nick Dimitrakopoulos. I'm 21 years old, an undergraduate student at Harokopio University of Athens and have experience in building back-end apps with focus on Java.

Currently, I'm exploring various technologies to decide what I want to do in my professional career. Whatever nice I learn, I will surely showcase it here :)


Find Me On:

profile for NickDelta on Stack Exchange, a network of free, community-driven Q&A sites

hermes-keycloak-image's People

Contributors

nickdelta avatar

Stargazers

 avatar

Watchers

 avatar

hermes-keycloak-image's Issues

Wrong Response Status In Organization Creation

Στην δηιουργία νέου οργανισμού, σε περίπτωση επιτυχίας επιστρέφεται 200 και όχι 201. Εκ παραδρομής πρέπει να μου ξέφυγε. Κάποια στιγμή πρέπει να ξαναδώ τον κώδικα του Organizations API.

Bump Keycloak to 14.0.0 And Add Kubernetes Config

Συνοπτικά,

  • Πρέπει να προστεθουν manifests του k8s που να κάνουν deploy το external-frontend στο GKE Cluster μας.
  • Πρέπει να προστεθεί ένα βήμα στο CI/CD Pipeline μας, το οποίο θα αυτοματοποιεί το deployment στο GKE. Η Google δίνει έτοιμο τον gke-deploy builder που διευκολύνει πολύ την διαδικασία για εμάς.
  • Θα γίνει και ένα version bump του keycloak στην έκδοση 14.0.0.

Upgrade image to Keycloak 12.0.1

Η έκδοση 12.0.1 του Keycloak λύνει ένα ίσως μελλοντικά ανερχόμενο εμπόδιο του πρότζεκτ: Την αδυναμία ενσωμάτωσης authentication/authorization σε custom REST endpoints. Επίσης, λύνει πληθώρα άλλων μικρών/μέγαλων bugs που μπορεί να επηρέαζαν το πρότζεκτ κατά κάποιο τρόπο.

Πρέπει να μελετηθεί το κατα πόσο η έκδοση αυτή επηρεάζει το ήδη υπάρχον codebase και τη λογική μας.

Image Maintenance

Αυτό το issue φροντίζει τα εξής ζητήματα:

  • Αναβάθμιση keycloak σε 13.0.0
  • Δημιουργία 2 ξεχωριστών realm config αρχείων για dev κσι prod περιβάλλοντα.
  • Αλλαγή συμπεριφοράς import ώστε να μην γίνεται βίαιο overwrite των config γιατί σε κάθε restart του container χάνονται όλα τα δεδομένα πέρα αυτών που είχαν γίνει import.

Implement Organizations Endpoint

Αυτό το issue ουσιαστικά απαρχαιώνει το issue #3 και το αντικαθιστά τελείως.
Το έτοιμο REST API που δίνει το keycloak στο δικό μας use case με τους οργανισμούς δεν είναι και πολύ ευέλικτο. Οπότε σκοπός είναι να κατασκευαστεί ένα custom endpoint που θα διευκολύνει όλο το business logic που έχει να κάνει με αυτό. Οπότε το νέο endpoint πρέπει εν συντομία:

  • Να μπορεί να επιστρέφει με pagination μηχανισμό τους οργανισμούς
  • Να μπορεί να δημιουργεί νέους οργανισμούς (μάζι με τα subgroups, ρόλους των subgroup κτλ μέσω μονάχα μιας κλήσης)
  • Να μπορεί να επιστρέφει με ευκολία τους supervisors και τους employees κάθε οργανισμού πάλι μέσω pagination
  • Τέλος πολύ σημαντικό είναι να μπορούν να χρησιμοποιηθούν και τα συμβατικά endpoints μέσω του νέου endpoint. Οπότε με κάτι μαγικά του RESTEasy (ένος Web Services framework που στηρίζεται πάνω στο JAX-RS και χρησιμοποιεί το Keycloak - θα σας εξηγήσω κάποια βασικά πραγματάκια σε skype call μας) θα υπάρχει η δυνατότητα να χρησιμοποιήσετε εύκολα τα συμβατικά endpoints μόλις εντοπίσετε το resource που θέλετε (User/Group κτλ).

Επίσης για να κάνω το integration ακόμα πιο εύκολο, θα τροποποιήσω και την REST Client βιβλιοθήκη που δίνουν οι devs του keycloak. Οπότε για παράδειγμα, αν κάποιος θέλει μια λίστα με τους πρώτους 100 supervisors του οργανισμού HUA , τότε απλά θα πρέπει να κάνει αυτό :

List<UserRepresentation> supervisors = client.organizations().organization("HUA").supervisors().list(0,100);

δεδομένου βέβαια ότι έχει κάνει σωστό config όταν φτιάχνει το HermesKeycloak client του (το οποίο δεν θα διαφέρει από το κλασικό Keycloak client στο config - αυτό είναι το ζητούμενο):

HermesKeycloakBuilder.builder()
                .serverUrl(serverUrl)
                .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                .realm(realm)
                .clientId(clientId)
                .clientSecret(clientSecret)
                .resteasyClient(
                        new ResteasyClientBuilder()
                                .connectionPoolSize(10)
                                .build()
                ).build();

Κάποιες σημειώσεις τώρα πιο DevOps - Μaintainance χαρακτήρα σχετικά με αυτό. Σε ένα κανονικό πρότζεκτ, πιστεύω ότι η καλύτερη τακτική θα ήταν να δημιουργηθεί ένα maven repository που θα είχε artifacts του custom client που θα φτιαχτεί. Έτσι κάθε φορά που θα γινόταν μια αλλαγή στο API, τότε μέσω CI/CD οι αλλαγές του client θα πακεταριζόντουσαν σε νέο artifact, έτοιμο να κουμπωθεί σε οποιοδήποτε άλλο πρότζεκτ θέλαμε. Το θεωρώ περιττό όμως για αυτό το πρότζεκτ, ο κόπος του να στήσω τέτοιο pipeline είναι μεγαλύτερος από τον κόπο του να το διαχειριστούμε manually. Αυτό που πρέπει να θυμόμαστε λοιπόν είναι ότι αν γίνει κάποια αλλαγή σε αυτό το API που χρειάζεται αλλαγή και στον client, τότε ο client πρέπει να ενημερωθεί επίσης σε κάθε πρότζεκτ το οποίο το χρησιμοποιούμε.

Περισσότερες πληροφορίες πάνω στη χρήση αυτού του endpoint, θα δωθούν σε skype call.

Implement Custom REST Endpoint To Get Groups By Path

Το REST API του Keycloak δεν έχει endpoint από το οποίο να μπορείς να πάρεις πληροφορίες για group βάσει διαδρομής group. Οπότε είναι ουσιαστικά υποχρεωτικό ο client να ξέρει τα IDs των Groups. Θα αναπτύξουμε ένα custom endpoint από το οποίο θα μπορούμε να πάρουμε πληροφορίες για την ιεραρχία των group βάσει του Path τους.

  • GET {{KEYCLOAK_URL}}/auth/realms/{{realm}}/custom/groups
    • Query Parameters:
      • path (String) -> Η διαδρομή του Group
      • full (Boolean) -> Αν θέλουμε πλήρεις λεπτομέρειες για τα Groups.
    • Returns:
      • 200 ΟΚ - με σώμα την ιεραρχία του group που δηλώσαμε στο path.
      • 401 Unauthenticated - ο χρήστης δεν έχει δώσει το bearer token
      • 403 Forbidden - αν ο αυθεντικοποιημένος χρήστης δεν έχει το ρόλο του διαχειριστή συστήματος (admin)

Ουσιαστικά έτσι θα μπορούμε πανεύκολα να παίρνουμε ττη λίστα όλων των οργανισμών του συστήματος, απλά με μία αναζήτηση για το Group ORGANIZATIONS.

@j-christou @viviangourgioti Θέλω να γνωρίζετε την ύπαρξη αυτού του endpoint. Όταν υλοποιηθεί και είναι έτοιμο θα σας ενημερώσω.

Implement a GroupMembershipHierarchicalMapper to have organization info in the token

Οι λειτουργικές απαιτήσεις του πρότζεκτ ωθούν την τοποθέτηση πληροφοριών στο token σχετικές με τους οργανισμούς που δουλεύουν οι ακόλουθες οντότητες:

  • Organization Supervisor (ROLE_ORG_SUPERVISOR)
  • Organization Employee (ROLE_ORG_EMPLOYEE)

Αυτές οι 2 οντότητες είναι οι μόνες οι οποίες είναι "δεμένες" με κάποιον οργανισμό. Σε περίπτωση που δεν τοποθετηθούν οι βασικές πληροφορίες σχετικά με τον οργανισμό που δουλεύουν (δηλ. όνομα και Group id) στο token, τότε θα υπάρχει μεγάλο κόστος αναζήτησης αυτών των πληροφοριών μέσω του REST API του Keycloak και θα γίνει και πιο δύσκολη η ανάπτυξη των front-end.

Το Keycloak δεν πάρεχει έναν τέτοιο Mapper έτοιμο, οπότε πρέπει να υλοποιηθεί.

Ενδεικτική απεικόνιση του πεδίου στο token:

  "groups": [
    {
      "id": "0028b872-8cd1-4be9-a913-914729c9cb19",
      "name": "EMPLOYEES",
      "groupRoles": [
        "ROLE_ORG_EMPLOYEE"
      ],
      "parent": {
        "id": "e104b094-886d-492e-945e-9805bb4f7a03",
        "name": "HUA",
        "groupRoles": []
      }
    }
  ]

Preparing For Production

Έγιναν οι ακόλουθες αλλαγές:

  • Αναβάθμιση εικόνας στην έκδοση 12.0.2
  • Ανακατασκευάστηκε ο Organization Mapper. Πλέον ο χρησιμότητα του στην εφαρμογή ήταν ξεκάθαρη και απλοποιήθηκε ώστε να ταιριάζει ακριβώς στο τι ζητάνε τα specs. Συνεπώς απαρχαιώνεται εντελώς το #2
  • Κατασκευάστηκε ένα Citizens endpoint ώστε να καλυφθούν οι ανάγκες του NickDelta/hermes-internal-front-end#12
  • Αυτοματοποίηθηκε το overwrite του realm για το dev mode. Πλέον με το που δημιουργείται μια νέα εικόνα, αυτόματα θα γίνεται αντικατάσταση των περιεχομένων του realm hermes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.