kordoni Δημοσ. 5 Οκτωβρίου 2017 Δημοσ. 5 Οκτωβρίου 2017 Χρησιμοποιω PHP με Apache και θέλω όταν κάνει login ο χρήστης να τον κρατάει μόνιμα συνδεδεμένο (εκτός αν πατήσει logout). Δε θέλω να το κάνε με cookies, προσπαθώ με JSON Web Tokens. Οπότε δουλέυω το php-jwt (https://github.com/firebase/php-jwt). Αυτό που πρέπει να γίνει είναι Απο front-end στέλνεις τα login δεδομένα στην php H php αποφασίζει αν μπορείς να κάνεις login Αν μπορείς, κατασκευάζεις ενα JWT οπως εδώ https://www.sitepoint.com/php-authorization-jwt-json-web-tokens/ (και εδω php-jwt έχει) Το στέλνεις front-end Το αποθηκεύεις σε local storage Αυτό που δεν έχω βρει είναι πως θα βάζω το JWT αυτόματα μέσα στο header σε κάθε request που ξεκινάει απο χρήστη και πάει server. Δεν θέλω να το στέλνω με φόρμα, ούτε μόνο στα get πχ, αλλά να μπαίνει αυτόματα παντού. Μετά, σε κάθε σελίδα που θα θέλω να τσεκάρω αν ο χρήστης είναι Logedin θα υπάρχει php που τσεκάρει το header, θα επαληθέυει οτι το JWT είναι σωστό και θα εμφανίζει το ανάλογο μενου, για χρήστες logedin ή οχι. Αν έχετε κάποια πρόταση, θα με βοηθούσε πολύ. Ευχαριστώ.
alou Δημοσ. 5 Οκτωβρίου 2017 Δημοσ. 5 Οκτωβρίου 2017 Γενικά έχεις 2 επιλογές: javascript και localstorage ή http-only cookie, με αυτή τη σειρά προτίμησης. Αυτό που θες γίνεται σε περίπτωση js app με custom headers σε κάθε request ή με cookie σε κάθε άλλη περίπτωση, ο browser δεν θα βάλει ποτέ μόνος του κάτι από το localstorage σε header.
kordoni Δημοσ. 6 Οκτωβρίου 2017 Μέλος Δημοσ. 6 Οκτωβρίου 2017 Πριν πάω σε laravel θέλω να καταλάβω πως μπορεί να γίνει σε ένα απλο σύστημα. Εγώ δεν καταλαβαίνω πως γίνετε να το βάζεις σε header το JWT απο τη στιγμή που το πήρες. Να αναδιατυπώσω Απο front-end στέλνεις τα login δεδομένα στην php H php αποφασίζει αν μπορείς να κάνεις login Αν μπορείς, κατασκευάζεις ενα JWT Το στέλνεις front-end Το αποθηκεύεις σε local storage Ωραία. Το εχεις το JWT. Είσαι loged-in. Και πας και βάζεις ένα url στο address bar. Και πατάς enter. Πως το jwt το βάζεις απο το localstorage σε header ; Δεν έχεις ajax πχ να προλάβεις να σετάρεις JWT header. Έχεις ένα JWT στο local storage και μετά βάζεις ένα url στο address bar και πατάς enter. Άρα δε μπορείς/προλαβαίνεις να στείλεις JWT header. Αρα η σελίδα στην οποία καταλήγεις, σε θεωρεί logged-out, ενω δεν είσαι, και σε στέλνει για login. Σωστά; Αρα ή δεν κάνει το JWT γ αυτή τη δουλειά, ή δεν κάνει γενικά το token authentication γ αυτή τη δουλειά, ή εγώ δεν κατάλαβα κάτι. Πιο πιθανό το τρίτο.
alou Δημοσ. 6 Οκτωβρίου 2017 Δημοσ. 6 Οκτωβρίου 2017 To JWT μπορείς είτε να το βάλεις με js στα headers είτε να το χρησιμοποιήσεις ως cookie, όπως σου έγραψα και παραπάνω οπότε θα πηγαινοέρχεται σε κάθε request του συγκεκριμένου domain. Ένα παράδειγμα που ίσως βοηθήσει στη δεύτερη περίπτωση είναι εδώ 1
παπι Δημοσ. 6 Οκτωβρίου 2017 Δημοσ. 6 Οκτωβρίου 2017 Πριν πάω σε laravel θέλω να καταλάβω πως μπορεί να γίνει σε ένα απλο σύστημα. Εγώ δεν καταλαβαίνω πως γίνετε να το βάζεις σε header το JWT απο τη στιγμή που το πήρες. Να αναδιατυπώσω Απο front-end στέλνεις τα login δεδομένα στην php H php αποφασίζει αν μπορείς να κάνεις login Αν μπορείς, κατασκευάζεις ενα JWT Το στέλνεις front-end Το αποθηκεύεις σε local storage Ωραία. Το εχεις το JWT. Είσαι loged-in. Και πας και βάζεις ένα url στο address bar. Και πατάς enter. Πως το jwt το βάζεις απο το localstorage σε header ; Δεν έχεις ajax πχ να προλάβεις να σετάρεις JWT header. Έχεις ένα JWT στο local storage και μετά βάζεις ένα url στο address bar και πατάς enter. Άρα δε μπορείς/προλαβαίνεις να στείλεις JWT header. Αρα η σελίδα στην οποία καταλήγεις, σε θεωρεί logged-out, ενω δεν είσαι, και σε στέλνει για login. Σωστά; Αρα ή δεν κάνει το JWT γ αυτή τη δουλειά, ή δεν κάνει γενικά το token authentication γ αυτή τη δουλειά, ή εγώ δεν κατάλαβα κάτι. Πιο πιθανό το τρίτο. Το βλεπεις απο την σκοπιά του κλασικου php mvc. Δες το από πλευρά client side mvc, πχ angular οπου το πρωτο response επιστρέφει ενα js προγραμμα 1
kordoni Δημοσ. 6 Οκτωβρίου 2017 Μέλος Δημοσ. 6 Οκτωβρίου 2017 Ωραία, (νομίζω ότι) κατάλαβα τι μου λέτε και οι δυο, σύμφωνα και με (μόνο την θεωρία απο εδώ και όχι την υλοποίηση) https://auth0.com/blog/cookies-vs-tokens-definitive-guide/ και https://www.sitepoint.com/php-authorization-jwt-json-web-tokens/ Ψευδοκώδικας - flowchart, στην περίπτωση που έχεις απλά php, mysql, javascript, jquery Server gets usernname/password checks if ok, create jwt send it to client Client gets jwt saves it to cookie Client goes to a page, either by form or ajax or typing url Server Checks the jwt found in cookie if valid, ok if not valid send to login page Σύμφωνα με τα 2 Link που έγραψα πιο πάνω, "Now that the client has the token, you can store it using JS or whichever mechanism you like." ... "The token is generally sent as an addition Authorization header in form of Bearer {JWT}, but can additionally be sent in the body of a POST request or even as a query parameter." .... "You can store the token in a cookie instead" Οπότε νομιζω η λογική μου δεν είναι τελείως άκυρη. Αλλάζει ο τρόπος μεταφοράς του jwt και αποθήκευσης του στο front-end. Η βασική διαφορά με cookie authentication παραμένει : "The server does not keep a record of which users are logged in or which JWTs have been issued." Ο σερβερ δεν αποθηκεύει τίποτα στη βάση σχετικά με το cookie. Κάπως του στέλνεις ένα jwt και το αξιολογέι και κρίνει αν θα σε πετάξει έξω ή όχι. Αν κάνω κάπου λάθος πείτε μου. Ευχαριστώ και πάλι.
alou Δημοσ. 6 Οκτωβρίου 2017 Δημοσ. 6 Οκτωβρίου 2017 Δεν κάνεις ακριβώς λάθος αλλά δεν είναι και απολύτως σωστά αυτά που αναφέρονται, απλά για να τα έχεις πιο ξεκάθαρα στο μυαλό σου όμως, η πιο σωστή επιλογή αν επιλέξεις να χρησιμοποιήσεις JWT θα ήταν το Bearer στο header, που προϋποθέτει javascript. Η λύση του url param ή form field δεν θεωρώ ότι πρέπει να είναι στα υπόψιν για γενική χρήση οπότε την προσπερνάω. Η άλλη λύση είναι cookie όπου δεν υπάρχει η session id αλλά το jw token που δημιουργείς στον server, Set-Cookie: myToken=... και το χρησιμοποιεί αυτόματα ο browser σε κάθε επόμενο request, οπότε φροντίζεις server side να το ελέγχεις και να χρησιμοποιήσει ότι πληροφορία έχει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα