Προγραμματισμός

Πώς να ασφαλίσετε ASP.Net Web API χρησιμοποιώντας φίλτρα εξουσιοδότησης

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

Το ASP.Net Web API είναι ένα ελαφρύ πλαίσιο που χρησιμοποιείται για τη δημιουργία υπηρεσιών RESTful χωρίς απάτη που εκτελούνται σε HTTP. Ένας τρόπος εξασφάλισης υπηρεσιών Web API είναι με φίλτρα εξουσιοδότησης.

Στην ιδανική περίπτωση, θα πρέπει να εκτελέσετε έλεγχο ταυτότητας και εξουσιοδότηση νωρίς στον αγωγό του Web API. Αυτό βοηθά στην εξάλειψη της περιττής επεξεργασίας από τον κύκλο αιτήσεων. Λάβετε υπόψη ότι, είτε χρησιμοποιείτε μονάδες HTTP είτε χειριστές μηνυμάτων HTTP για έλεγχο ταυτότητας, μπορείτε να ανακτήσετε τον τρέχοντα κύριο (δηλ. Τον χρήστη) ApiController. Χρήστη ιδιοκτησία.

Λάβετε επίσης υπόψη ότι τα φίλτρα εξουσιοδότησης API Ιστού εκτελούνται πριν από τις μεθόδους δράσης του ελεγκτή. Επομένως, εάν το εισερχόμενο αίτημα δεν εγκριθεί, θα επιστραφεί ένα σφάλμα από την υπηρεσία, το αίτημα θα αγνοηθεί και η μέθοδος δράσης της υπηρεσίας δεν θα εκτελεστεί.

Χρήση του φίλτρου εξουσιοδότησης AuthorizeAttribute

Το ενσωματωμένο φίλτρο εξουσιοδότησης Εξουσιοδότηση χαρακτηριστικού μπορεί να χρησιμοποιηθεί για την έγκριση εισερχόμενων αιτημάτων. Μπορείς να χρησιμοποιήσειςΕξουσιοδότηση χαρακτηριστικού για να ελέγξετε εάν ο χρήστης έχει πιστοποιηθεί. Εάν ο χρήστης δεν έχει πιστοποιηθεί, θα επιστρέψει τον κωδικό κατάστασης HTTP 401. Αυτή η εξουσιοδότηση μπορεί να εφαρμοστεί σε Web API παγκοσμίως ή σε επίπεδο ελεγκτή.

Σημειώστε ότι μπορείτε επίσης να εφαρμόσετε έναν προσαρμοσμένο χειριστή μηνυμάτων για να εξουσιοδοτήσετε την πρόσβαση στις μεθόδους του ελεγκτή σας, καθώς τα φίλτρα μηνυμάτων εκτελούνται πολύ νωρίτερα στον κύκλο ζωής του Web API

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

Δημόσιο στατικό άκυρο Μητρώο (HttpConfiguration config)

        {

// Διαμόρφωση και υπηρεσίες API Ιστού

// Διαδρομές API Ιστού

config.MapHttpAttributeRoutes ();

config.Routes.MapHttpRoute (

όνομα: "DefaultApi",

routeTemplate: "api / {controller} / {id}",

   προεπιλογές: νέο {id = RouteParameter.Optional}

            ); 

config.Filters.Add (νέο AuthorizeAttribute ());

        } 

Χρήση του χαρακτηριστικού Authorize

Σε επίπεδο ελεγκτή, μπορείτε να περιορίσετε την πρόσβαση εφαρμόζοντας το Εξουσιοδοτώ χαρακτηριστικό όπως φαίνεται στο απόσπασμα κώδικα που δίνεται στη συνέχεια.

[Εξουσιοδοτώ]

δημόσια τάξη EmployeesController: ApiController

{

// Γράψτε εδώ μεθόδους που αντιστοιχούν στα ρήματα Http

}

Μπορείτε επίσης να εφαρμόσετε το Εξουσιοδοτώ χαρακτηριστικό σε επίπεδο δράσης για τον περιορισμό της πρόσβασης σε μια συγκεκριμένη μέθοδο δράσης. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να εφαρμοστεί.

δημόσια τάξη EmployeesController: ApiController

{

δημόσιο HttpResponseMessage Get () {// Κάποιος κωδικός}

// Απαιτείται εξουσιοδότηση για μια συγκεκριμένη ενέργεια.

[Εξουσιοδοτώ]

δημόσια HttpResponseMessage Post (Employee emp) {// Κάποιος κωδικός}

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

δημόσια τάξη EmployeesController: ApiController

{

δημόσιο HttpResponseMessage Get () {// Κάποιος κωδικός}

[AllowAnonymous]

δημόσια HttpResponseMessage Post (Employee emp) {// Κάποιος κωδικός}

}

Εξουσιοδότηση ενεργειών ανά ρόλους και χρήστες

Είναι επίσης δυνατό να περιοριστεί η πρόσβαση σε μεθόδους δράσης από ρόλους και χρήστες. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να επιτευχθεί αυτό.

[Εξουσιοδότηση (Χρήστες = "Joydip, Jini")] // Περιορισμός πρόσβασης από τον χρήστη

δημόσια τάξη EmployeesController: ApiController

{

// Γράψτε εδώ μεθόδους που αντιστοιχούν στα ρήματα Http

}

Στο παραπάνω παράδειγμα, ο ελεγκτής υπαλλήλων περιορίζει την πρόσβαση μόνο στους χρήστες Joydip και Jini. Ο παρακάτω κώδικας δείχνει πώς μπορείτε να περιορίσετε την πρόσβαση κατά ρόλους.

[Εξουσιοδότηση (Ρόλοι = "Διαχειριστές")] // Περιορισμός βάσει ρόλων

δημόσια τάξη EmployeesController: ApiController

{

// Γράψτε εδώ μεθόδους που αντιστοιχούν στα ρήματα Http

}

Μπορείτε πάντα να έχετε πρόσβαση στο ApiController. Χρήστη ιδιότητα μέσα στη μέθοδο ελεγκτή για να ανακτήσετε την τρέχουσα αρχή και να εκχωρήσετε εξουσιοδότηση βάσει του ρόλου του χρήστη Αυτό φαίνεται στην παρακάτω λίστα κωδικών.

δημόσιο HttpResponseMessage Λήψη ()

{

εάν (User.IsInRole ("Διαχειριστές"))

    {

// Γράψτε τον κωδικό σας εδώ

    }

}

Χρήση προσαρμοσμένων φίλτρων εξουσιοδότησης στο ASP.Net Web API

Ένα φίλτρο εξουσιοδότησης είναι μια κλάση που επεκτείνει το AuthorizationFilterAttribute τάξη και αντικαθιστά το OnAuthorization () μέθοδος. Αυτή είναι η μέθοδος όπου μπορείτε να γράψετε τη λογική εξουσιοδότησης. Εάν η εξουσιοδότηση αποτύχει, μπορείτε να επιστρέψετε μια παρουσία του Μη εξουσιοδοτημένη εξαίρεση τάξη ή ακόμα και ένα έθιμο HttpResponseMessage.

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

δημόσια τάξη CustomAuthorizeAttribute: AuthorizeAttribute

    {

δημόσια παράκαμψη κενού OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

εάν (AuthorizeRequest (actionContext))

            {

ΕΠΙΣΤΡΟΦΗ;

            }

HandleUnauthorizedRequest (actionContext);

        }

προστατευμένη παράκαμψη κενού

        {

// Κωδικός για τη διαχείριση μη εξουσιοδοτημένου αιτήματος

        }

ιδιωτικό bool AuthorizeRequest (System.Web.Http.Controllers.HttpActionContext actionContext)

        {

// Γράψτε τον κωδικό σας εδώ για να εκτελέσετε εξουσιοδότηση

επιστροφή αληθινή?

        }

    }

$config[zx-auto] not found$config[zx-overlay] not found