Υπό κανονικές συνθήκες, όταν κάνουμε διαχείριση δικαιωμάτων πρόσβασης, θα αποθηκεύουμε τις βασικές πληροφορίες του χρήστη μετά τη σωστή σύνδεση στη συνεδρία και θα τις λαμβάνουμε κάθε φορά που ο χρήστης ζητά δεδομένα σελίδας ή διεπαφής στο μέλλον
Συνεδρία για να δείτε και να συγκρίνετε αν είναι συνδεδεμένος και αν μπορεί να έχει πρόσβαση στην τρέχουσα σελίδα.
Η αρχή του Session είναι να δημιουργεί ένα SessionID στην πλευρά του διακομιστή που αντιστοιχεί στα αποθηκευμένα δεδομένα χρήστη και το SessionID αποθηκεύεται σε ένα cookie και ο πελάτης θα το φέρει μαζί του κάθε φορά που ζητείται
Cookie, ο διακομιστής βρίσκει τα δεδομένα που είναι αποθηκευμένα στην πλευρά του διακομιστή με βάση το αναγνωριστικό περιόδου λειτουργίας στο cookie.
Το FormsAuthentication παρέχεται από τη Microsoft για χρήση από εμάς τους προγραμματιστές για έλεγχο ταυτότητας. Μέσω αυτού του ελέγχου ταυτότητας, μπορούμε να αποθηκεύσουμε το όνομα χρήστη και ορισμένα δεδομένα χρήστη σε cookies,
Ο βασικός έλεγχος ταυτότητας και ρόλου μπορεί εύκολα να επιτευχθεί μέσω βασικών ρυθμίσεων συνθηκών.
Το αποτέλεσμα που πρέπει να επιτευχθεί εδώ είναι η εφαρμογή ελέγχου πρόσβασης βάσει ρόλων χρησιμοποιώντας την εξουσιοδότηση που παρέχεται από το σύστημα χωρίς τη χρήση ιδιότητας μέλους.
1. Δημιουργήστε ένα εισιτήριο
Αφού συνδεθεί ο χρήστης, το αναγνωριστικό χρήστη και ο αντίστοιχος ρόλος (για πολλούς ρόλους, διαχωρισμένοι) αποθηκεύονται στο εισιτήριο.
Κρυπτογραφήστε το εισιτήριο με το FormsAuthentication.Encrypt.
Αποθηκεύστε το κρυπτογραφημένο εισιτήριο στο cookie απόκρισης (ο πελάτης js δεν χρειάζεται να διαβάσει αυτό το cookie, επομένως είναι καλύτερο να ορίσετε το HttpOnly=True για να αποτρέψετε τις επιθέσεις του προγράμματος περιήγησης από την κλοπή και την πλαστογράφηση cookies). Με αυτόν τον τρόπο, μπορείτε να το διαβάσετε από το cookie Request την επόμενη φορά.
Ένα απλό demo έχει ως εξής:
bool isPersistent, //αν θα παραμείνει (ορίστε όπως απαιτείται, εάν οριστεί σε persistence, η ρύθμιση Expires του cookie πρέπει να οριστεί κατά την αποστολή ενός cookie)
Η έκτη παράμετρος του FormsAuthenticationTicket αποθηκεύει τα δεδομένα χρήστη της συμβολοσειράς τύπου, όπου αποθηκεύεται το αναγνωριστικό ρόλου του τρέχοντος χρήστη, διαχωρισμένο με κόμμα.
Όταν συνδέεστε με ένα όνομα χρήστη "test", εμφανίζεται ένα cookie καταγραφής στον πελάτη
2. Λάβετε πληροφορίες πιστοποίησης
Αφού συνδεθούμε, στη σελίδα περιεχομένου, μπορούμε να λάβουμε τις πληροφορίες uname μέσω της User.Identity.Name του τρέχοντος αιτήματος ή μπορούμε να αποκρυπτογραφήσουμε το cookie στο αίτημα για την απόκτηση του εισιτηρίου και, στη συνέχεια, να λάβουμε το uname και τα userData (δηλαδή τις προηγουμένως αποθηκευμένες πληροφορίες αναγνωριστικού ρόλου) από αυτό.
3. Πραγματοποιήστε τον έλεγχο πρόσβασης αδειών μέσω χαρακτηριστικών σχολιασμού
Ρύθμιση παραμέτρων Ενεργοποίηση ελέγχου ταυτότητας φόρμας και διαχείρισης ρόλων στο web.config
Όταν προσθέτουμε ιδιότητες σχολιασμού στο Controller and Action, από πού παίρνουμε τον καθορισμένο ρόλο; Δεδομένου ότι δεν χρησιμοποιούμε τον έλεγχο ταυτότητας βάσει συνδρομής, θα δημιουργήσουμε επίσης έναν προσαρμοσμένο RoleProvider. Το όνομα είναι CustomRoleProvider, το οποίο μεταβιβάζεται από το RoleProvider. Εδώ είναι η δημιουργία του δικού σας αρχείου CustomRoleProvider.cs στο φάκελο Helper κάτω από το MVCApp.
Υπάρχουν πολλές αφηρημένες μέθοδοι στο RoleProvider και εφαρμόζουμε μόνο τη μέθοδο GetRolesForUser για να λάβουμε ρόλους χρήστη. Ο ρόλος του χρήστη εδώ μπορεί να ζητηθεί από τη βάση δεδομένων σύμφωνα με το αναγνωριστικό χρήστη που αποκτήθηκε ή αυτό που είναι αποθηκευμένο στη συνεδρία ή αποθηκευμένο στο cookie. Εδώ έχω ήδη αποθηκεύσει τον ρόλο στα δεδομένα χρήστη του εισιτηρίου, οπότε ας τον πάρουμε από το εισιτήριο.
Εάν είναι απαραίτητο, προσθέστε χαρακτηριστικά σχολιασμού στον επικυρωμένο ελεγκτή ή ενέργεια, για παράδειγμα, αυτή η ενέργεια επιτρέπει την πρόσβαση μόνο με RoleID 1 ή 2 ή 3 και το RoleID του τρέχοντος χρήστη είναι (7, 1, 8), που σημαίνει ότι ο χρήστης έχει δικαίωμα πρόσβασης.
Υ.Γ. :1. Το εισιτήριο αποθηκεύεται κατά τη λήξη του cookie και εάν το πρόγραμμα περιήγησης είναι κλειστό για να θυμάται το τρέχον εισιτήριο, οι παράμετροι μπορούν να ρυθμιστούν όταν δημιουργηθεί το FormsAuthenticationTicket.
2. Η απόκτηση του ρόλου μπορεί να διαβαστεί απευθείας από τη βάση δεδομένων χωρίς να αποθηκευτεί στα δεδομένα χρήστη του εισιτηρίου και τα δεδομένα χρήστη μπορούν να αποθηκεύσουν άλλες πληροφορίες.
3. Εάν θέλετε να διαμορφώσετε ευέλικτα τους ρόλους επιτρεπόμενης πρόσβασης του ελεγκτή και της ενέργειας, μπορείτε να προσαρμόσετε τη μέθοδο OnAuthorization στην παράκαμψη AuthorizeAttribute, στην οποία χρησιμοποιείται η μέθοδος
Διαβάστε το αναγνωριστικό ρόλου που επιτρέπεται στην τρέχουσα σελίδα και ελέγξτε το σύμφωνα με το RoleID του τρέχοντος χρήστη. Με αυτόν τον τρόπο, πραγματοποιείται η ευέλικτη διαμόρφωση του ρόλου.
4. Οι πληροφορίες στο εισιτήριο αποθηκεύονται τελικά στο cookie και η ασφάλεια εξακολουθεί να είναι στη διακριτική σας ευχέρεια, προσωπικά πιστεύω ότι είναι καλύτερο να αποθηκεύσετε το UserID και το RoleID στη συνεδρία.
|