SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Σε οποιαδήποτε μεγάλη εταιρεία, και η X5 Retail Group δεν αποτελεί εξαίρεση, καθώς αναπτύσσεται, ο αριθμός των έργων που απαιτούν εξουσιοδότηση χρήστη αυξάνεται. Με την πάροδο του χρόνου, απαιτείται απρόσκοπτη μετάβαση των χρηστών από τη μια εφαρμογή στην άλλη και, στη συνέχεια, υπάρχει η ανάγκη χρήσης ενός διακομιστή Single-Sing-On (SSO). Τι γίνεται όμως όταν πάροχοι ταυτότητας όπως η AD ή άλλοι που δεν έχουν πρόσθετα χαρακτηριστικά χρησιμοποιούνται ήδη σε διάφορα έργα. Μια κατηγορία συστημάτων που ονομάζονται «μεσίτες ταυτοποίησης» θα έρθουν στη διάσωση. Οι πιο λειτουργικοί είναι οι εκπρόσωποί του, όπως Keycloak, Gravitee Access Management, κ.λπ. Τις περισσότερες φορές, οι περιπτώσεις χρήσης μπορεί να είναι διαφορετικές: αλληλεπίδραση μηχανής, συμμετοχή χρήστη κ.λπ. Η λύση πρέπει να υποστηρίζει ευέλικτη και επεκτάσιμη λειτουργικότητα που μπορεί να συνδυάζει όλες τις απαιτήσεις σε μία, και τέτοιες λύσεις η εταιρεία μας διαθέτει πλέον μεσίτης ένδειξης - Keycloak.

SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Το Keycloak είναι ένα προϊόν ταυτότητας και ελέγχου πρόσβασης ανοιχτού κώδικα που διατηρείται από την RedHat. Αποτελεί τη βάση για τα προϊόντα της εταιρείας που χρησιμοποιούν SSO - RH-SSO.

Βασικές έννοιες

Πριν αρχίσετε να ασχολείστε με λύσεις και προσεγγίσεις, θα πρέπει να αποφασίσετε ως προς τους όρους και τη σειρά των διαδικασιών:

SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Ταυτοποίηση είναι μια διαδικασία για την αναγνώριση ενός θέματος από το αναγνωριστικό του (με άλλα λόγια, αυτός είναι ο ορισμός ενός ονόματος, σύνδεσης ή αριθμού).

Έλεγχος ταυτότητας - πρόκειται για διαδικασία ελέγχου ταυτότητας (ο χρήστης ελέγχεται με κωδικό πρόσβασης, η επιστολή ελέγχεται με ηλεκτρονική υπογραφή κ.λπ.)

Είσοδος - αυτή είναι η παροχή πρόσβασης σε έναν πόρο (για παράδειγμα, σε ηλεκτρονικό ταχυδρομείο).

Κλειδί μεσίτης ταυτότητας

Μπρελόκ είναι μια λύση διαχείρισης ταυτότητας και πρόσβασης ανοιχτού κώδικα που έχει σχεδιαστεί για χρήση σε IS όπου μπορούν να χρησιμοποιηθούν μοτίβα αρχιτεκτονικής μικροϋπηρεσιών.

Το Keycloak προσφέρει λειτουργίες όπως ενιαία σύνδεση (SSO), ταυτότητα με μεσολάβηση και σύνδεση κοινωνικής δικτύωσης, ομοσπονδία χρηστών, προσαρμογείς πελατών, κονσόλα διαχειριστή και κονσόλα διαχείρισης λογαριασμού.

Βασική λειτουργικότητα που υποστηρίζεται από το Keycloak:

  • Single-Sign On και Single-Sign Out για εφαρμογές προγράμματος περιήγησης.
  • Υποστήριξη για OpenID/OAuth 2.0/SAML.
  • Identity Brokering - έλεγχος ταυτότητας με χρήση εξωτερικών παρόχων ταυτότητας OpenID Connect ή SAML.
  • Κοινωνική σύνδεση - Υποστήριξη Google, GitHub, Facebook, Twitter για αναγνώριση χρηστών.
  • Συνένωση χρηστών - συγχρονισμός χρηστών από διακομιστές LDAP και Active Directory και άλλους παρόχους ταυτότητας.
  • Kerberos bridge - χρήση διακομιστή Kerberos για αυτόματο έλεγχο ταυτότητας χρήστη.
  • Κονσόλα διαχειριστή - για ενοποιημένη διαχείριση ρυθμίσεων και επιλογών λύσεων μέσω του Ιστού.
  • Κονσόλα διαχείρισης λογαριασμού - για αυτοδιαχείριση του προφίλ χρήστη.
  • Προσαρμογή της λύσης με βάση την εταιρική ταυτότητα της εταιρείας.
  • 2FA Authentication - Υποστήριξη TOTP/HOTP με χρήση Google Authenticator ή FreeOTP.
  • Ροές σύνδεσης - είναι δυνατή η αυτοεγγραφή χρήστη, η ανάκτηση και επαναφορά κωδικού πρόσβασης και άλλα.
  • Διαχείριση συνεδρίας - οι διαχειριστές μπορούν να διαχειρίζονται τις συνεδρίες χρήστη από ένα μόνο σημείο.
  • Token Mappers - δεσμεύουν χαρακτηριστικά χρήστη, ρόλους και άλλα απαιτούμενα χαρακτηριστικά σε διακριτικά.
  • Ευέλικτη διαχείριση πολιτικής σε όλο το πεδίο, την εφαρμογή και τους χρήστες.
  • Υποστήριξη CORS - Οι προσαρμογείς πελάτη έχουν ενσωματωμένη υποστήριξη CORS.
  • Διεπαφές παρόχου υπηρεσιών (SPI) - Ένας μεγάλος αριθμός SPI που σας επιτρέπουν να προσαρμόσετε διάφορες πτυχές του διακομιστή: ροές ελέγχου ταυτότητας, πάροχοι ταυτότητας, αντιστοίχιση πρωτοκόλλου και πολλά άλλα.
  • Προσαρμογείς πελάτη για εφαρμογές JavaScript, WildFly, JBoss EAP, Fuse, Tomcat, Jetty, Spring.
  • Υποστήριξη για εργασία με διάφορες εφαρμογές που υποστηρίζουν τη βιβλιοθήκη OpenID Connect Relying Party ή τη βιβλιοθήκη παρόχων υπηρεσιών SAML 2.0.
  • Επεκτάσιμο με χρήση πρόσθετων.

Για διεργασίες CI / CD, καθώς και για την αυτοματοποίηση των διαδικασιών διαχείρισης στο Keycloak, μπορεί να χρησιμοποιηθεί το REST API / JAVA API. Η τεκμηρίωση διατίθεται ηλεκτρονικά:

REST API https://www.keycloak.org/docs-api/8.0/rest-api/index.html
Java API https://www.keycloak.org/docs-api/8.0/javadocs/index.html

Πάροχοι εταιρικής ταυτότητας (on-premise)

Δυνατότητα ελέγχου ταυτότητας χρηστών μέσω των υπηρεσιών Ομοσπονδίας Χρηστών.

SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Μπορεί επίσης να χρησιμοποιηθεί έλεγχος ταυτότητας διαβίβασης - εάν οι χρήστες ελέγχουν ταυτότητα σε σταθμούς εργασίας με Kerberos (LDAP ή AD), τότε μπορούν να πιστοποιηθούν αυτόματα στο Keycloak χωρίς να χρειάζεται να εισαγάγουν ξανά το όνομα χρήστη και τον κωδικό πρόσβασής τους.

Για τον έλεγχο ταυτότητας και την περαιτέρω εξουσιοδότηση των χρηστών, είναι δυνατό να χρησιμοποιηθεί ένα σχεσιακό DBMS, το οποίο είναι πιο κατάλληλο για περιβάλλοντα ανάπτυξης, καθώς δεν περιλαμβάνει μακροχρόνιες ρυθμίσεις και ενσωματώσεις στα αρχικά στάδια των έργων. Από προεπιλογή, το Keycloak χρησιμοποιεί ένα ενσωματωμένο DBMS για την αποθήκευση ρυθμίσεων και δεδομένων χρήστη.

Η λίστα των υποστηριζόμενων DBMS είναι εκτενής και περιλαμβάνει: MS SQL, Oracle, PostgreSQL, MariaDB, Oracle και άλλα. Τα πιο δοκιμασμένα μέχρι στιγμής είναι τα Oracle 12C Release1 RAC και Galera 3.12 cluster για το MariaDB 10.1.19.

Πάροχοι ταυτότητας - κοινωνική σύνδεση

Είναι δυνατή η χρήση σύνδεσης από τα κοινωνικά δίκτυα. Για να ενεργοποιήσετε τη δυνατότητα ελέγχου ταυτότητας χρηστών, χρησιμοποιήστε την κονσόλα διαχειριστή Keycloack. Δεν απαιτούνται αλλαγές στον κωδικό της εφαρμογής και αυτή η λειτουργία είναι διαθέσιμη εκτός συσκευασίας και μπορεί να ενεργοποιηθεί σε οποιοδήποτε στάδιο του έργου.

SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Είναι δυνατή η χρήση παρόχων OpenID/SAML Identity για έλεγχο ταυτότητας χρήστη.

Τυπικά σενάρια εξουσιοδότησης που χρησιμοποιούν OAuth2 στο Keycloak

Ροή κωδικού εξουσιοδότησης - χρησιμοποιείται με εφαρμογές διακομιστή. Ένας από τους πιο συνηθισμένους τύπους αδειών εξουσιοδότησης, επειδή είναι κατάλληλος για εφαρμογές διακομιστή όπου ο πηγαίος κώδικας της εφαρμογής και τα δεδομένα πελάτη δεν είναι διαθέσιμα σε τρίτους. Η διαδικασία σε αυτή την περίπτωση βασίζεται στην ανακατεύθυνση. Η εφαρμογή πρέπει να μπορεί να αλληλεπιδρά με έναν παράγοντα χρήστη (user-agent), όπως ένα πρόγραμμα περιήγησης ιστού - για να λαμβάνει κωδικούς εξουσιοδότησης API που ανακατευθύνονται μέσω του παράγοντα χρήστη.

άρρητη ροή - χρησιμοποιείται από εφαρμογές για κινητά ή web (εφαρμογές που εκτελούνται στη συσκευή του χρήστη).

Ο τύπος σιωπηρής άδειας εξουσιοδότησης χρησιμοποιείται από εφαρμογές για κινητές συσκευές και web όπου δεν μπορεί να εγγυηθεί το απόρρητο του πελάτη. Ο τύπος σιωπηρής άδειας χρησιμοποιεί επίσης ανακατεύθυνση παράγοντα χρήστη, όπου το διακριτικό πρόσβασης μεταβιβάζεται στον παράγοντα χρήστη για περαιτέρω χρήση στην εφαρμογή. Αυτό καθιστά το διακριτικό διαθέσιμο στον χρήστη και σε άλλες εφαρμογές στη συσκευή του χρήστη. Αυτός ο τύπος άδειας εξουσιοδότησης δεν επαληθεύει την ταυτότητα της εφαρμογής και η ίδια η διαδικασία βασίζεται σε μια διεύθυνση URL ανακατεύθυνσης (που είχε καταχωρηθεί προηγουμένως στην υπηρεσία).

Το Implicit Flow δεν υποστηρίζει διακριτικά ανανέωσης διακριτικού πρόσβασης.

Ροή επιχορήγησης διαπιστευτηρίων πελάτη — χρησιμοποιούνται όταν η εφαρμογή αποκτά πρόσβαση στο API. Αυτός ο τύπος άδειας εξουσιοδότησης χρησιμοποιείται συνήθως για αλληλεπιδράσεις διακομιστή με διακομιστή που πρέπει να εκτελούνται στο παρασκήνιο χωρίς άμεση αλληλεπίδραση χρήστη. Η ροή εκχώρησης διαπιστευτηρίων πελάτη επιτρέπει σε μια υπηρεσία ιστού (εμπιστευτικό πελάτη) να χρησιμοποιεί τα δικά της διαπιστευτήρια αντί να πλαστοπροσωπεί έναν χρήστη για έλεγχο ταυτότητας όταν καλεί μια άλλη υπηρεσία ιστού. Για υψηλότερο επίπεδο ασφάλειας, είναι δυνατό για την υπηρεσία κλήσης να χρησιμοποιήσει ένα πιστοποιητικό (αντί για ένα κοινό μυστικό) ως διαπιστευτήριο.

Η προδιαγραφή OAuth2 περιγράφεται στο
RFC-6749
RFC-8252
RFC-6819

Token JWT και τα οφέλη του

Το JWT (JSON Web Token) είναι ένα ανοιχτό πρότυπο (https://tools.ietf.org/html/rfc7519) που ορίζει έναν συμπαγή και αυτόνομο τρόπο για την ασφαλή μεταφορά πληροφοριών μεταξύ των μερών ως αντικείμενο JSON.

Σύμφωνα με το πρότυπο, το διακριτικό αποτελείται από τρία μέρη σε μορφή βάσης-64, που χωρίζονται με τελείες. Το πρώτο μέρος ονομάζεται κεφαλίδα, το οποίο περιέχει τον τύπο του διακριτικού και το όνομα του αλγορίθμου κατακερματισμού για τη λήψη ψηφιακής υπογραφής. Το δεύτερο μέρος αποθηκεύει τις βασικές πληροφορίες (χρήστης, χαρακτηριστικά κ.λπ.). Το τρίτο μέρος είναι η ψηφιακή υπογραφή.

. .
Ποτέ μην αποθηκεύετε ένα διακριτικό στο DB σας. Επειδή ένα έγκυρο διακριτικό ισοδυναμεί με κωδικό πρόσβασης, η αποθήκευση του διακριτικού είναι σαν την αποθήκευση του κωδικού πρόσβασης σε καθαρό κείμενο.
Διακριτικό πρόσβασης είναι ένα διακριτικό που παρέχει στον κάτοχό του πρόσβαση σε ασφαλείς πόρους διακομιστή. Συνήθως έχει μικρή διάρκεια ζωής και μπορεί να φέρει πρόσθετες πληροφορίες, όπως τη διεύθυνση IP του μέρους που ζητά το διακριτικό.

Ανανέωση διακριτικού είναι ένα διακριτικό που επιτρέπει στους πελάτες να ζητούν νέα διακριτικά πρόσβασης μετά τη λήξη της διάρκειας ζωής τους. Αυτά τα διακριτικά εκδίδονται συνήθως για μεγάλο χρονικό διάστημα.

Τα κύρια πλεονεκτήματα της χρήσης στην αρχιτεκτονική microservice:

  • Δυνατότητα πρόσβασης σε διάφορες εφαρμογές και υπηρεσίες μέσω εφάπαξ ελέγχου ταυτότητας.
  • Ελλείψει ορισμένων απαιτούμενων χαρακτηριστικών στο προφίλ χρήστη, είναι δυνατός ο εμπλουτισμός με δεδομένα που μπορούν να προστεθούν στο ωφέλιμο φορτίο, συμπεριλαμβανομένων των αυτοματοποιημένων και εν κινήσει.
  • Δεν χρειάζεται να αποθηκεύονται πληροφορίες σχετικά με τις ενεργές περιόδους λειτουργίας, η εφαρμογή διακομιστή χρειάζεται μόνο να επαληθεύσει την υπογραφή.
  • Πιο ευέλικτο έλεγχο πρόσβασης μέσω πρόσθετων χαρακτηριστικών στο ωφέλιμο φορτίο.
  • Η χρήση συμβολικής υπογραφής για την κεφαλίδα και το ωφέλιμο φορτίο αυξάνει την ασφάλεια της λύσης στο σύνολό της.

JWT token - σύνθεση

Τίτλος - από προεπιλογή, η κεφαλίδα περιέχει μόνο τον τύπο του διακριτικού και τον αλγόριθμο που χρησιμοποιείται για την κρυπτογράφηση.

Ο τύπος του διακριτικού αποθηκεύεται στο κλειδί "typ". Το κλειδί «τύπου» αγνοείται στο JWT. Εάν υπάρχει το κλειδί "typ", η τιμή του πρέπει να είναι JWT για να υποδείξει ότι αυτό το αντικείμενο είναι JSON Web Token.

Το δεύτερο κλειδί "alg" ορίζει τον αλγόριθμο που χρησιμοποιείται για την κρυπτογράφηση του διακριτικού. Θα πρέπει να οριστεί σε HS256 από προεπιλογή. Η κεφαλίδα είναι κωδικοποιημένη στο base64.

{ "alg": "HS256", "type": "JWT"}
ωφέλιμο φορτίο (περιεχόμενο) - το ωφέλιμο φορτίο αποθηκεύει κάθε πληροφορία που χρειάζεται να ελεγχθεί. Κάθε κλειδί στο ωφέλιμο φορτίο είναι γνωστό ως "αξίωση". Για παράδειγμα, μπορείτε να εισέλθετε στην εφαρμογή μόνο με πρόσκληση (κλειστή προσφορά). Όταν θέλουμε να προσκαλέσουμε κάποιον να συμμετάσχει, του στέλνουμε μια επιστολή πρόσκλησης. Είναι σημαντικό να ελέγξετε ότι η διεύθυνση email ανήκει στο άτομο που αποδέχεται την πρόσκληση, επομένως θα συμπεριλάβουμε αυτήν τη διεύθυνση στο ωφέλιμο φορτίο, για αυτό την αποθηκεύουμε στο κλειδί "email"

{ "ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ": "[προστασία μέσω email]"}

Τα κλειδιά στο ωφέλιμο φορτίο μπορεί να είναι αυθαίρετα. Ωστόσο, υπάρχουν μερικές επιφυλάξεις:

  • iss (Εκδότης) - Προσδιορίζει την εφαρμογή από την οποία αποστέλλεται το διακριτικό.
  • υπο (Θέμα) - ορίζει το θέμα του διακριτικού.
  • Το aud (Κοινό) είναι μια σειρά από συμβολοσειρές ή URI με διάκριση πεζών-κεφαλαίων που είναι μια λίστα με τους παραλήπτες αυτού του διακριτικού. Όταν η πλευρά λήψης λάβει ένα JWT με το δεδομένο κλειδί, πρέπει να ελέγξει για την παρουσία του στους παραλήπτες - διαφορετικά αγνοήστε το διακριτικό.
  • exp (Χρόνος λήξης) - Υποδεικνύει πότε λήγει το διακριτικό. Το πρότυπο JWT απαιτεί από όλες τις υλοποιήσεις του να απορρίπτουν τα ληγμένα διακριτικά. Το κλειδί exp πρέπει να είναι μια χρονική σήμανση σε μορφή unix.
  • Το nbf (Not Before) είναι ένας χρόνος σε μορφή unix που καθορίζει τη στιγμή που το διακριτικό γίνεται έγκυρο.
  • iat (Issued At) - Αυτό το κλειδί αντιπροσωπεύει τη στιγμή που εκδόθηκε το διακριτικό και μπορεί να χρησιμοποιηθεί για τον προσδιορισμό της ηλικίας του JWT. Το κλειδί iat πρέπει να είναι χρονική σήμανση σε μορφή unix.
  • Jti (JWT ID) — μια συμβολοσειρά που ορίζει το μοναδικό αναγνωριστικό αυτού του διακριτικού, με διάκριση πεζών-κεφαλαίων.

Είναι σημαντικό να κατανοήσουμε ότι το ωφέλιμο φορτίο δεν μεταδίδεται σε κρυπτογραφημένη μορφή (αν και τα διακριτικά μπορούν να είναι ένθετα και στη συνέχεια είναι δυνατή η μετάδοση κρυπτογραφημένων δεδομένων). Επομένως, δεν μπορεί να αποθηκεύσει μυστικές πληροφορίες. Όπως η κεφαλίδα, το ωφέλιμο φορτίο είναι κωδικοποιημένο με βάση το 64.
Υπογραφή - όταν έχουμε τίτλο και ωφέλιμο φορτίο, μπορούμε να υπολογίσουμε την υπογραφή.

Base64-encoded: η κεφαλίδα και το ωφέλιμο φορτίο λαμβάνονται, συνδυάζονται σε μια συμβολοσειρά μέσω μιας τελείας. Στη συνέχεια, αυτή η συμβολοσειρά και το μυστικό κλειδί εισάγονται στον αλγόριθμο κρυπτογράφησης που καθορίζεται στην κεφαλίδα (κλειδί "alg"). Το κλειδί μπορεί να είναι οποιαδήποτε συμβολοσειρά. Οι μεγαλύτερες χορδές θα προτιμηθούν περισσότερο, καθώς θα χρειαστεί περισσότερος χρόνος για να σηκωθούν.

{"alg":"RSA1_5","payload":"A128CBC-HS256"}

Δημιουργία αρχιτεκτονικής συμπλέγματος ανακατεύθυνσης Keycloak

Όταν χρησιμοποιείτε ένα ενιαίο σύμπλεγμα για όλα τα έργα, υπάρχουν αυξημένες απαιτήσεις για μια λύση SSO. Όταν ο αριθμός των έργων είναι μικρός, αυτές οι απαιτήσεις δεν είναι τόσο εμφανείς για όλα τα έργα, ωστόσο, με την αύξηση του αριθμού των χρηστών και των ενσωματώσεων, οι απαιτήσεις για διαθεσιμότητα και απόδοση αυξάνονται.

Η αύξηση του κινδύνου αποτυχίας μεμονωμένου SSO αυξάνει τις απαιτήσεις για την αρχιτεκτονική λύσης και τις μεθόδους που χρησιμοποιούνται για περιττά εξαρτήματα και οδηγεί σε ένα πολύ σφιχτό SLA. Από αυτή την άποψη, πιο συχνά κατά τη διάρκεια της ανάπτυξης ή των πρώτων σταδίων εφαρμογής λύσεων, τα έργα έχουν τη δική τους υποδομή που δεν αντέχει σε σφάλματα. Καθώς η ανάπτυξη προχωρά, απαιτείται να τεθούν ευκαιρίες για ανάπτυξη και κλιμάκωση. Είναι πιο ευέλικτο να δημιουργήσετε ένα σύμπλεγμα ανακατεύθυνσης χρησιμοποιώντας εικονικοποίηση κοντέινερ ή μια υβριδική προσέγγιση.

Για να εργαστείτε σε καταστάσεις λειτουργίας συμπλέγματος Ενεργό/Ενεργό και Ενεργό/Παθητικό, απαιτείται η διασφάλιση της συνέπειας των δεδομένων σε μια σχεσιακή βάση δεδομένων - και οι δύο κόμβοι βάσης δεδομένων πρέπει να αναπαράγονται συγχρονισμένα μεταξύ διαφορετικών γεω-κατανεμημένων κέντρων δεδομένων.

Το απλούστερο παράδειγμα εγκατάστασης με ανοχή σε σφάλματα.

SSO για την αρχιτεκτονική μικροϋπηρεσιών. Χρησιμοποιούμε Keycloak. Μέρος 1

Ποια είναι τα οφέλη από τη χρήση ενός μόνο συμπλέγματος:

  • Υψηλή διαθεσιμότητα και απόδοση.
  • Υποστήριξη για τρόπους λειτουργίας: Ενεργό / Ενεργό, Ενεργό / Παθητικό.
  • Δυνατότητα δυναμικής κλίμακας - όταν χρησιμοποιείται εικονικοποίηση κοντέινερ.
  • Δυνατότητα κεντρικής διαχείρισης και παρακολούθησης.
  • Ενιαία προσέγγιση για την αναγνώριση / έλεγχο ταυτότητας / εξουσιοδότηση χρηστών σε έργα.
  • Πιο διαφανής αλληλεπίδραση μεταξύ διαφορετικών έργων χωρίς τη συμμετοχή των χρηστών.
  • Η δυνατότητα επαναχρησιμοποίησης του JWT token σε διάφορα έργα.
  • Ενιαίο σημείο εμπιστοσύνης.
  • Ταχύτερη εκκίνηση έργων με χρήση μικροϋπηρεσιών/εικονικοποίησης κοντέινερ (δεν χρειάζεται να ανυψώσετε και να διαμορφώσετε πρόσθετα στοιχεία).
  • Είναι δυνατή η αγορά εμπορικής υποστήριξης από τον πωλητή.

Τι πρέπει να αναζητήσετε όταν σχεδιάζετε ένα σύμπλεγμα

DBMS

Το Keycloak χρησιμοποιεί ένα σύστημα διαχείρισης βάσεων δεδομένων για να αποθηκεύσει: βασίλεια, πελάτες, χρήστες κ.λπ.
Υποστηρίζεται ένα ευρύ φάσμα DBMS: MS SQL, Oracle, MySQL, PostgreSQL. Το Keycloak διαθέτει τη δική του ενσωματωμένη σχεσιακή βάση δεδομένων. Συνιστάται η χρήση για μη φορτωμένα περιβάλλοντα - όπως περιβάλλοντα ανάπτυξης.

Για να εργαστείτε σε καταστάσεις ενεργού/ενεργού και ενεργού/παθητικού συμπλέγματος, απαιτείται συνέπεια δεδομένων σε μια σχεσιακή βάση δεδομένων και και οι δύο κόμβοι συμπλέγματος βάσεων δεδομένων αναπαράγονται συγχρονισμένα μεταξύ των κέντρων δεδομένων.

Κατανεμημένη κρυφή μνήμη (Infinspan)

Για να λειτουργήσει σωστά το σύμπλεγμα, απαιτείται πρόσθετος συγχρονισμός των ακόλουθων τύπων κρυφής μνήμης χρησιμοποιώντας το πλέγμα δεδομένων JBoss:

Συνεδρίες ελέγχου ταυτότητας - χρησιμοποιούνται για την αποθήκευση δεδομένων κατά τον έλεγχο ταυτότητας ενός συγκεκριμένου χρήστη. Τα αιτήματα από αυτήν την προσωρινή μνήμη περιλαμβάνουν συνήθως μόνο το πρόγραμμα περιήγησης και τον διακομιστή Keycloak, όχι την εφαρμογή.

Τα διακριτικά ενεργειών χρησιμοποιούνται για σενάρια όπου ο χρήστης πρέπει να επιβεβαιώσει μια ενέργεια ασύγχρονα (μέσω email). Για παράδειγμα, κατά τη διάρκεια μιας ροής ξεχασμένου κωδικού πρόσβασης, η προσωρινή μνήμη actionTokens Infinispan χρησιμοποιείται για να παρακολουθεί τα μεταδεδομένα σχετικά με συσχετισμένα διακριτικά ενεργειών που έχουν ήδη χρησιμοποιηθεί, επομένως δεν μπορεί να επαναχρησιμοποιηθεί.

Προσωρινή αποθήκευση και ακύρωση μόνιμα δεδομένων - χρησιμοποιείται για την προσωρινή αποθήκευση μόνιμα δεδομένων για την αποφυγή περιττών ερωτημάτων στη βάση δεδομένων. Όταν οποιοσδήποτε διακομιστής Keycloak ενημερώνει τα δεδομένα, όλοι οι άλλοι διακομιστές Keycloak σε όλα τα κέντρα δεδομένων πρέπει να το γνωρίζουν.

Εργασία - Χρησιμοποιείται μόνο για την αποστολή μη έγκυρων μηνυμάτων μεταξύ κόμβων συμπλέγματος και κέντρων δεδομένων.

Συνεδρίες χρήστη - χρησιμοποιούνται για την αποθήκευση δεδομένων σχετικά με τις περιόδους σύνδεσης χρήστη που ισχύουν για τη διάρκεια της περιόδου λειτουργίας προγράμματος περιήγησης του χρήστη. Η κρυφή μνήμη πρέπει να επεξεργάζεται αιτήματα HTTP από τον τελικό χρήστη και την εφαρμογή.

Προστασία ωμής βίας - χρησιμοποιείται για την παρακολούθηση δεδομένων σχετικά με αποτυχημένες συνδέσεις.

Εξισορρόπηση φορτίου

Το load balancer είναι το μοναδικό σημείο εισόδου στο keycloak και πρέπει να υποστηρίζει σταθερές συνεδρίες.

Διακομιστές εφαρμογών

Χρησιμοποιούνται για τον έλεγχο της αλληλεπίδρασης των στοιχείων μεταξύ τους και μπορούν να εικονικοποιηθούν ή να μετατραπούν σε εμπορευματοκιβώτια χρησιμοποιώντας υπάρχοντα εργαλεία αυτοματισμού και δυναμική κλιμάκωση εργαλείων αυτοματισμού υποδομής. Τα πιο συνηθισμένα σενάρια ανάπτυξης σε OpenShift, Kubernates, Rancher.

Αυτό ολοκληρώνει το πρώτο μέρος - το θεωρητικό. Στην επόμενη σειρά άρθρων, θα αναλυθούν παραδείγματα ενσωματώσεων με διάφορους παρόχους ταυτότητας και παραδείγματα ρυθμίσεων.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο