Γεια σας... Έχει υλοποιήσει κανείς SSO με openidco...
# chat
m
Γεια σας... Έχει υλοποιήσει κανείς SSO με openidconnect, drupal backend, react front end?
👋 1
k
με openidconnect, drupal backend & drupal frontend ναι
m
Δεν είναι το case μας. Εχουμε να ξεπερασουμε αρκετά εμπόδια. Η react ειναι ενα SPA. το Drupal ειναι ενα αλλο site σαν κλασσικο drupal με ΒΕ και FE, αλλα έχει SSO ιδιο με το SPA και εχει REST services που κανει consume το SPA. Οπότε έχουμε διάφορα να λύσουμε όπως... Κάνει login o χρηστης στο SPA, κανει ενα calll το drupal, έχοντας το OIDC token στον header του και ο χρήστης δεν υπάρχει στο drupal. Οποτε πρεπει το drupal να διαβασει κάπως το token, να το κανει authenticate στον authprovider, να φτιαξει τον χρήστη(αν ειναι η πρώτη φορα), και να σερβιρει τα data που εχει permission ο χρηστης να βλέπει στο SPA......
Ψαχνω να βρω πηγές στο web αλλά βρίσκω για το πως δουλεύει το OIDC που χαιρω πολυ ειναι ξεκαθαρο. Αλλά cases σαν το δικο μας δεν βρίσκω ή δεν ψάχνω σωστά. Σκεφτόμασταν μήπως πρέπει να ενεργοποιήσουμε το simple_oauth και να φτιάξουμε ενα client για το SPA, αλλά δεν ξέρω αν είναι σωστό...
και τι θαγίνει αν γίνει expire το token του SPA? το κάνουμε κάπως refresh? και αν το κάνουμε refresh μήπως έτσι θα πρεπει να γινει logout ο χρήστης απο το SPA.
Τελοσπάντων αν καταλήξουμε πως θα το κάνουμε θα το μοιραστώ...
👍 1
m
Μπέρδεμα. Νομιζω πως πρεπει το SPA να κανει authenticate στο drupal. Δεν ξερω ομως πως θα χειριστείς τη δημιoυργία νέων accounts απο τo SPA.
t
Υπάρχουν 2 flows: authentication & authorization αυτό θα σε βοηθήσει: https://developer.okta.com/docs/guides/sign-in-overview/main/
d
Hi! Εδώ πάντως έχει μία υλοποίηση που μπορεί να βοηθάει https://github.com/sparkfabrik/auth0-drupal/blob/master/src/Controller/AuthController.php Το refresh το χειρίζεται το SPA με τον auth provider (SSO). το drupal θα πρέπει να ενδιαφέρεται μόνο για το introspection
t
Επίσης το θα μπορούσες να μην έχεις auth layer και να έχεις το content API χωρίς αλλά να έχεις ένα firewall rule από το client στον server αν μπορεί να κλειδωθεί.
Επισης αν έχεις υλοποίηση με paragraphs τότε το JSON API είναι απαράδεκτο διότι απαιτεί πάρα πολλά calls, τσέκαρε για GraphQL
@Margarita τελικά προς τι λύση έχετε στραφεί;
m
λοιπόν, το case μας ειναι εντελώς κουλό. Φτιάχνουμε ενα admin tool σε react που θα χρησιμοποιηθεί αντί του drupal admin tool για manage συγκεκριμένων entities. Το json api δεν το χρησιμοποιήσαμε γιατί ο τρόπος που είναι τα out of the box json structuresπου επιστρέφονται είναι χάλια και δεν βόλευαν το react κομματι, οπότε όλα ειναι custom rests. Για το SSO τώρα αλλα και την επικοινωνία react/drupal, χρησιμοποιήσαμε το openid_connect module. Το flow είναι: Το react admin tool κάνει login τον OICD identity provider (ενας cas στην περιπτωση μας). Παιρνει ενα token. Κάνει rrequest στο drupal με το token στον header. Στο drupal χρησιμοποιώντας το token το κάνουμε verify , χρηιμοποιώντας το authorization endpoint του wellknown, και αν ολα ΟΚ ο χρήστης φτιάχνεται αυτόματα και στο drupal και το drupal επιστρέφει στην react οτι πρέπει. Σε κάθε call απο react σε drupal, o header εχει πάντα ως bearer token το token του OICD έτσι ώστε τα rest call να ειναι authorized. Αυτά τα λίγα απο εμένα... Δεν ξέρω αν βγάζουν νόημα όπως τα γράφω, σε εμένα πριν λίγο καιρο δεν έβγαζαν 😄 PS: πολυ κουραστικό το switch απο Αγγλικα σε ελληνικά, αγαπώ greeklish:)
αααα να προθεσω ότι τον identity provider, CAS, φτιάχτηκαν 2 clients ενας για BE και ενας για FE, configured να χρηιμοποιουν authorization code flow με JWT που ειναι το recommended one.
o BE client ειναι protected με secret ενω ο FE οχι