Οδηγός ασφάλειας Web Service (WS) με Παράδειγμα SOAP

Τι είναι το WS Security;

Το WS Security είναι ένα πρότυπο που αντιμετωπίζει την ασφάλεια όταν ανταλλάσσονται δεδομένα ως μέρος μιας υπηρεσίας Web. Αυτό είναι ένα βασικό χαρακτηριστικό του SOAP που το καθιστά πολύ δημοφιλές για τη δημιουργία υπηρεσιών web.

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

Απειλές Ασφαλείας και Αντίμετρα

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

Ένα από τα μέτρα ασφαλείας που είναι διαθέσιμα για το HTTP είναι το πρωτόκολλο HTTPS. Το HTTPS είναι ο ασφαλής τρόπος επικοινωνίας μεταξύ του πελάτη και του διακομιστή μέσω του ιστού. Το HTTPS χρησιμοποιεί το επίπεδο Secure Sockets ή το SSL για ασφαλή επικοινωνία. Τόσο ο πελάτης όσο και ο διακομιστής θα έχουν ένα ψηφιακό πιστοποιητικό για να αυτοπροσδιορίζονται ως γνήσιο όταν πραγματοποιείται οποιαδήποτε επικοινωνία μεταξύ του πελάτη και του διακομιστή.

Απειλές Ασφαλείας και Αντίμετρα

Σε μια τυπική επικοινωνία HTTPS μεταξύ του πελάτη και του διακομιστή, πραγματοποιούνται τα ακόλουθα βήματα

  1. Ο πελάτης στέλνει ένα αίτημα στον διακομιστή μέσω του πιστοποιητικού πελάτη. Όταν ο διακομιστής βλέπει το πιστοποιητικό πελάτη, κάνει μια σημείωση στο σύστημα προσωρινής αποθήκευσης, έτσι ώστε να γνωρίζει ότι η απάντηση πρέπει να επιστρέφει μόνο σε αυτόν τον πελάτη.
  2. Στη συνέχεια, ο διακομιστής ελέγχει τον εαυτό του στον πελάτη στέλνοντας το πιστοποιητικό του. Αυτό διασφαλίζει ότι ο πελάτης επικοινωνεί με τον σωστό διακομιστή.
  3. Στη συνέχεια, όλη η επικοινωνία μεταξύ του πελάτη και του διακομιστή είναι κρυπτογραφημένη. Αυτό διασφαλίζει ότι εάν άλλοι χρήστες προσπαθήσουν να παραβιάσουν την ασφάλεια και να λάβουν τα απαιτούμενα δεδομένα, δεν θα μπορούν να τα διαβάσουν επειδή θα ήταν κρυπτογραφημένα.

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

Απειλές Ασφαλείας και Αντίμετρα

Αυτό είναι όπου το SOAP δραστηριοποιείται για να ξεπεράσει τέτοια εμπόδια, έχοντας την προδιαγραφή WS Security. Με αυτήν την προδιαγραφή, όλα τα δεδομένα που σχετίζονται με την ασφάλεια ορίζονται στο στοιχείο κεφαλίδας SOAP.

Το στοιχείο κεφαλίδας μπορεί να περιέχει τις παρακάτω πληροφορίες

  1. Εάν το μήνυμα εντός του σώματος SOAP έχει υπογραφεί με οποιοδήποτε κλειδί ασφαλείας, αυτό το κλειδί μπορεί να οριστεί στο στοιχείο κεφαλίδας.
  2. Εάν οποιοδήποτε στοιχείο εντός του σώματος SOAP είναι κρυπτογραφημένο, η κεφαλίδα θα περιέχει τα απαραίτητα κλειδιά κρυπτογράφησης, έτσι ώστε το μήνυμα να μπορεί να αποκρυπτογραφηθεί όταν φτάσει στον προορισμό.

Σε περιβάλλοντα πολλαπλών διακομιστών, η παραπάνω τεχνική ελέγχου ταυτότητας SOAP βοηθά με τον ακόλουθο τρόπο.

  • Εφόσον το σώμα του SOAP είναι κρυπτογραφημένο, θα μπορεί να αποκρυπτογραφηθεί μόνο από τον διακομιστή ιστού που φιλοξενεί την υπηρεσία Ιστού. Αυτό οφείλεται στο πώς έχει σχεδιαστεί το πρωτόκολλο SOAP.
  • Ας υποθέσουμε ότι εάν το μήνυμα διαβιβαστεί στον διακομιστή της βάσης δεδομένων σε ένα αίτημα HTTP, δεν μπορεί να αποκρυπτογραφηθεί επειδή η βάση δεδομένων δεν διαθέτει κατάλληλους μηχανισμούς για να το κάνει.
  • Μόνο όταν το αίτημα φτάσει πραγματικά στον διακομιστή Web ως πρωτόκολλο SOAP, θα μπορεί να αποκρυπτογραφήσει το μήνυμα και να στείλει την κατάλληλη απάντηση πίσω στον πελάτη.

Θα δούμε στα επόμενα θέματα πώς μπορεί να χρησιμοποιηθεί το πρότυπο WS Security SOAP.

Πρότυπα ασφαλείας υπηρεσιών Web

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

Η διαχείριση των διαπιστευτηρίων στην κεφαλίδα SOAP γίνεται με 2 τρόπους.

Πρώτον, ορίζει ένα ειδικό στοιχείο που ονομάζεται UsernameToken. Αυτό χρησιμοποιείται για τη μεταβίβαση του ονόματος χρήστη και του κωδικού πρόσβασης στην υπηρεσία web.

Ο άλλος τρόπος είναι να χρησιμοποιήσετε ένα Binary Token μέσω του BinarySecurityToken. Αυτό χρησιμοποιείται σε καταστάσεις στις οποίες χρησιμοποιούνται τεχνικές κρυπτογράφησης όπως το Kerberos ή το X.509.

Το παρακάτω διάγραμμα δείχνει τη ροή του τρόπου λειτουργίας του μοντέλου ασφαλείας στο WS Security

Πρότυπα ασφαλείας υπηρεσιών Web

Παρακάτω είναι τα βήματα που λαμβάνουν χώρα στην παραπάνω ροή εργασιών

  1. Ένα αίτημα μπορεί να σταλεί από το πρόγραμμα-πελάτη της υπηρεσίας Web στην Υπηρεσία διακριτικών ασφαλείας. Αυτή η υπηρεσία μπορεί να είναι μια ενδιάμεση υπηρεσία Ιστού η οποία έχει σχεδιαστεί ειδικά για να παρέχει ονόματα χρήστη/κωδικούς πρόσβασης ή πιστοποιητικά στην πραγματική υπηρεσία ιστού SOAP.
  2. Στη συνέχεια, το διακριτικό ασφαλείας μεταβιβάζεται στον πελάτη της υπηρεσίας Web.
  3. Στη συνέχεια, ο πελάτης της υπηρεσίας Ιστού κάλεσε την υπηρεσία Ιστού, αλλά, αυτή τη φορά, διασφαλίζοντας ότι το διακριτικό ασφαλείας είναι ενσωματωμένο στο μήνυμα SOAP.
  4. Στη συνέχεια, η υπηρεσία Web κατανοεί το μήνυμα SOAP με το διακριτικό ελέγχου ταυτότητας και στη συνέχεια μπορεί να επικοινωνήσει με την υπηρεσία Security Token για να δει εάν το διακριτικό ασφαλείας είναι αυθεντικό ή όχι.

Το παρακάτω απόσπασμα δείχνει τη μορφή του τμήματος ελέγχου ταυτότητας που αποτελεί μέρος του εγγράφου WSDL. Τώρα με βάση το παρακάτω απόσπασμα, το μήνυμα SOAP θα περιέχει 2 πρόσθετα στοιχεία, το ένα είναι το όνομα χρήστη και το άλλο ο κωδικός πρόσβασης.

<xs:element name="UsernameToken">  
	<xs:complexType>       
		<xs:sequence>           
			<xs:element ref="Username"/>         
			<xs:element ref="Password" minOccurs="0"/>        
		</xs:sequence>       
	<xs:attribute name="Id" type="xs:ID"/>    
</xs:complexType></xs:element>

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

Πώς να δημιουργήσετε ασφαλείς υπηρεσίες web

Τώρα ας δούμε το παράδειγμα ασφάλειας της υπηρεσίας ιστού SOAP. Θα δημιουργήσουμε μια ασφάλεια υπηρεσίας Ιστού με βάση το παράδειγμα που παρουσιάστηκε νωρίτερα στο κεφάλαιο SOAP και θα προσθέσουμε ένα επίπεδο ασφαλείας σε αυτό.

Στο παράδειγμά μας, πρόκειται να δημιουργήσουμε μια απλή υπηρεσία web, η οποία θα χρησιμοποιηθεί για να επιστρέψει μια συμβολοσειρά στην εφαρμογή που καλεί την υπηρεσία web. Αλλά αυτή τη φορά, όταν γίνεται επίκληση της υπηρεσίας web, τα διαπιστευτήρια πρέπει να παρέχονται στην υπηρεσία κλήσης. Ας ακολουθήσουμε τα παρακάτω βήματα για να δημιουργήσουμε την υπηρεσία web SOAP και να προσθέσουμε τον ορισμό ασφάλειας σε αυτήν.

Βήμα 1) Το πρώτο βήμα είναι να δημιουργήσετε ένα κενό Asp.Net Web εφαρμογή. Από το Visual Studio 2013, κάντε κλικ στην επιλογή μενού Αρχείο->Νέο έργο.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

Μόλις κάνετε κλικ στην επιλογή Νέο έργο, το Visual Studio θα σας δώσει ένα άλλο παράθυρο διαλόγου για να επιλέξετε τον τύπο του έργου και να δώσετε τις απαραίτητες λεπτομέρειες του έργου. Αυτό εξηγείται στο επόμενο βήμα

Βήμα 2) Στο στάδιο αυτό,

  1. Βεβαιωθείτε ότι έχετε επιλέξει πρώτα το C# πρότυπο web για την εφαρμογή Ιστού ASP.NET. Το έργο πρέπει να είναι αυτού του τύπου για να δημιουργηθεί έργο υπηρεσιών web. Επιλέγοντας αυτήν την επιλογή, το Visual Studio θα πραγματοποιήσει στη συνέχεια τα απαραίτητα βήματα για την προσθήκη απαιτούμενων αρχείων που απαιτούνται από οποιαδήποτε εφαρμογή που βασίζεται στο web.
  2. Δώστε ένα όνομα για το έργο σας που στην περίπτωσή μας έχει δοθεί ως "webservice.asmx.” Στη συνέχεια, φροντίστε να δώσετε μια τοποθεσία, όπου θα αποθηκευτούν τα αρχεία του έργου.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

Μόλις τελειώσετε, θα δείτε το αρχείο του έργου που δημιουργήθηκε στην εξερεύνηση λύσεων στο Visual Studio 2013.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

Βήμα 3) Στο στάδιο αυτό,

Θα προσθέσουμε ένα αρχείο υπηρεσίας Web στο έργο μας

  1. Πρώτα κάντε δεξί κλικ στο αρχείο του έργου όπως φαίνεται παρακάτω

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

  1. Αφού κάνετε δεξί κλικ στο αρχείο του έργου, έχετε την ευκαιρία να επιλέξετε «Προσθήκη->Υπηρεσία Ιστού (ASMX) για να προσθέσετε ένα αρχείο υπηρεσίας web. Απλώς δώστε ένα όνομα της υπηρεσίας εκμάθησης για το αρχείο ονόματος της υπηρεσίας web.

    Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

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

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

Βήμα 4) Προσθέστε τον ακόλουθο κώδικα στο αρχείο Asmx της Υπηρεσίας Εκμάθησης. Το παρακάτω απόσπασμα κώδικα χρησιμοποιείται για την προσθήκη μιας προσαρμοσμένης κλάσης που θα χρησιμοποιηθεί για την αλλαγή της κεφαλίδας SOAP όταν δημιουργηθεί το μήνυμα SOAP. Επειδή τώρα θέλουμε να προσθέσουμε διαπιστευτήρια ασφαλείας στην κεφαλίδα SOAP, αυτό το βήμα είναι απαραίτητο.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

		return "This is a Guru99 Web Service";
	}
	
	public class AuthHeader : SoapHeader
	{
		public string UserName;
		public string Password;

	}
}

Επεξήγηση κώδικα: -

  1. Τώρα δημιουργούμε μια ξεχωριστή κλάση που ονομάζεται AuthHeader που είναι τύπου Κατηγορία SoapHeader. Κάθε φορά που θέλετε να αλλάξετε αυτό που μεταβιβάζεται στην κεφαλίδα SOAP, πρέπει να δημιουργήσετε μια κλάση που χρησιμοποιεί την ενσωματωμένη κλάση SoapHeader του .Net. Προσαρμόζοντας το SOAPheader, έχουμε πλέον τη δυνατότητα να μεταβιβάσουμε ένα «Όνομα χρήστη» και «Κωδικός πρόσβασης» όταν καλείται η υπηρεσία Ιστού.
  2. Στη συνέχεια ορίζουμε τις μεταβλητές του 'UserName' και 'Password' που είναι τύπου string. Θα χρησιμοποιηθούν για τη διατήρηση των τιμών του ονόματος χρήστη και του κωδικού πρόσβασης που μεταβιβάζονται στην υπηρεσία web.

Βήμα 5) Ως επόμενο βήμα, ο ακόλουθος κώδικας πρέπει να προστεθεί στον ίδιο Αρχείο TutorialService.asmx. Αυτός ο κώδικας ουσιαστικά ορίζει τη λειτουργία της υπηρεσίας web μας. Αυτή η συνάρτηση επιστρέφει μια συμβολοσειρά "This is a Guru99 Web service" στον πελάτη. Αλλά αυτή τη φορά, η συμβολοσειρά θα επιστραφεί μόνο εάν η εφαρμογή πελάτη μεταβιβάσει τα διαπιστευτήρια στην υπηρεσία web.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

public class TutorialService : System.Web.Services.WebService
{ 
	public AuthHeader Credentials; 
	
	[SoapHeader("Credentials")] 
	
	[WebMethod]
	public string Guru99WebService()
	{ 
	
		if (Credentials.UserName.ToLower() != "Guru99" ||
		Credentials.Password.ToLower() != "Guru99Password") 
		{
			throw new SoapException("Unauthorized",
			SoapException.ClientFaultCode);
		}
		eise
		return "This is a Guru99 Web service";
	}

Επεξήγηση κώδικα: -

  1. Εδώ, δημιουργούμε ένα αντικείμενο της κλάσης AuthHeader που δημιουργήθηκε στο προηγούμενο βήμα. Αυτό το αντικείμενο θα περάσει στο δικό μας Guru99 Webservice στο οποίο μπορούν να εξεταστούν προσεκτικά το όνομα χρήστη και ο κωδικός πρόσβασης.
  2. Το χαρακτηριστικό [SoapHeader] χρησιμοποιείται τώρα για να προσδιορίσει ότι όταν καλείται η υπηρεσία Web, πρέπει να έχει περάσει το όνομα χρήστη και ο κωδικός πρόσβασης.
  3. Σε αυτό το μπλοκ κώδικα, στην πραγματικότητα εξετάζουμε το όνομα χρήστη και τον κωδικό πρόσβασης που δόθηκε κατά την κλήση της υπηρεσίας Ιστού. Εάν το όνομα χρήστη είναι ίσο με "Guru99" και ο κωδικός πρόσβασης είναι ίσος με "Guru99Password", τότε το μήνυμα "Αυτή είναι μια υπηρεσία Ιστού Guru99" μεταβιβάζεται στον πελάτη. Διαφορετικά, θα αποσταλεί ένα σφάλμα στον πελάτη, εάν περάσουν λάθος αναγνωριστικό χρήστη και κωδικός πρόσβασης.

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

Παραγωγή:

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

Η παραπάνω έξοδος εμφανίζεται όταν εκτελείται το πρόγραμμα, πράγμα που σημαίνει ότι η υπηρεσία Web είναι πλέον διαθέσιμη. Ας κάνουμε κλικ στην Υπηρεσία Descriptσύνδεσμος ιόντων.

Δημιουργήστε ασφαλείς υπηρεσίες Ιστού

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

Web Service Security καλυτερα Πρακτικές

Ακολουθούν τα ζητήματα ασφαλείας που πρέπει να ληφθούν υπόψη κατά την εργασία με υπηρεσίες Web

1. Έλεγχος και διαχείριση αρχείων καταγραφής – Χρησιμοποιήστε την καταγραφή εφαρμογών για την καταγραφή όλων των αιτημάτων που έρχονται στις υπηρεσίες web. Αυτό παρέχει μια λεπτομερή αναφορά σχετικά με το ποιος έχει επικαλεστεί την υπηρεσία Ιστού και μπορεί να βοηθήσει στην ανάλυση επιπτώσεων εάν συμβεί οποιαδήποτε παραβίαση ασφαλείας.

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

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

4. Παρακολούθηση επιχειρήσεων Operaσεις – Παρακολούθηση σημαντικών επιχειρηματικών δραστηριοτήτων. Για παράδειγμα, οργανώστε την εφαρμογή σας για να καταγράψετε την πρόσβαση σε ιδιαίτερα ευαίσθητες μεθόδους και επιχειρηματική λογική. Ας πάρουμε ένα παράδειγμα μιας εφαρμογής διαδικτυακών αγορών. Υπάρχουν πολλά βήματα σε μια τυπική εφαρμογή, όπως η επιλογή των ειδών που θα αγοραστούν, τα είδη που φορτώνονται στο καλάθι και στη συνέχεια η τελική αγορά. Ολόκληρη αυτή η επιχειρηματική ροή εργασιών πρέπει να παρακολουθείται από την υπηρεσία Ιστού.

5. Σωστός έλεγχος ταυτότητας – Ο έλεγχος ταυτότητας είναι ο μηχανισμός με τον οποίο οι πελάτες μπορούν να καθορίσουν την ταυτότητά τους με την υπηρεσία Ιστού χρησιμοποιώντας ένα συγκεκριμένο σύνολο διαπιστευτηρίων που μπορούν να αποδείξουν αυτήν την ταυτότητα. Δεν θα πρέπει ποτέ να αποθηκεύονται τα διαπιστευτήρια χρήστη και επομένως, εάν το WS Security χρησιμοποιείται για την κλήση της υπηρεσίας web, πρέπει να σημειωθεί ότι η υπηρεσία web δεν πρέπει να αποθηκεύει τα διαπιστευτήρια που αποστέλλονται στην κεφαλίδα SOAP. Αυτά θα πρέπει να απορριφθούν από την υπηρεσία web.

Σύνοψη

  • Το SOAP παρέχει ένα πρόσθετο επίπεδο που ονομάζεται Ασφάλεια WS για την παροχή πρόσθετης ασφάλειας όταν πραγματοποιούνται κλήσεις σε υπηρεσίες Ιστού.
  • Το WS Security μπορεί να κληθεί με ένα απλό όνομα χρήστη ή κωδικό πρόσβασης ή μπορεί να χρησιμοποιηθεί με δυαδικά πιστοποιητικά για έλεγχο ταυτότητας
  • Το έχουμε δει σε . Καθαρά Μπορούμε να προσαρμόσουμε την υπηρεσία Ιστού ώστε να μεταβιβάζεται ένα όνομα χρήστη και ένας κωδικός πρόσβασης ως μέρος του στοιχείου κεφαλίδας SOAP.