Σε μια διαμόρφωση SPNEGO του Jetty υπάρχουν τρία ονόματα: το URI που χρησιμοποιείται για την αντιστοίχιση της ταυτοποίησης, ο χρήστης που συνδέεται μέσω JAAS και η υπηρεσία για την οποία ζητείται εισιτήριο. Έχουν διαφορετικούς σκοπούς.

Για την υλοποίηση Jetty 12.0.x, ένα απόσπασμα αντικειμένου ταυτοποίησης είναι:

var auth = new org.eclipse.jetty.client.SPNEGOAuthentication(
    java.net.URI.create("http://proxy.example:8080"));
auth.setServiceName("HTTP");

Αυτό το απόσπασμα δείχνει το στοιχείο υπηρεσίας, όχι μια πλήρη συνταγή ταυτοποίησης μέσω proxy. Η σύνδεση JAAS, η δρομολόγηση proxy και η ανταλλαγή ταυτοποίησης του αιτήματος παραμένουν χωριστές.

Σε αυτή την υλοποίηση το Jetty δημιουργεί το όνομα GSS με βάση τον κεντρικό υπολογιστή συνδυάζοντας το getServiceName(), τον χαρακτήρα @ και τον κεντρικό υπολογιστή της ανταλλαγής ταυτοποίησης. Αν δοθεί το [email protected] ως στοιχείο υπηρεσίας, θα προστεθεί άλλος κεντρικός υπολογιστής. Διαβάστε το συμβόλαιο αυτού του setter αντί να υποθέσετε ότι δέχεται πλήρες principal Kerberos.

Το όνομα GSS που προκύπτει έχει την εννοιολογική μορφή HTTP@hostname. Το αντίστοιχο principal υπηρεσίας του KDC συνήθως αναπαρίσταται ως HTTP/hostname. Το επιλεγμένο όνομα proxy πρέπει να αντιστοιχεί στην υπηρεσία που είναι πραγματικά καταχωρισμένη για αυτόν τον λογαριασμό· μια διεύθυνση IP ή ψευδώνυμο μπορεί να επιλέξει άλλο στόχο εισιτηρίου.

Ελέγξτε και τη διαδρομή 407

Στο Jetty 12.0.x η authenticate() λαμβάνει το όνομα κεντρικού υπολογιστή GSS από το request.getHost() και δημιουργεί αποτέλεσμα με την προεπιλεγμένη κεφαλίδα Authorization. Η αντιστοίχιση αντικειμένου ταυτοποίησης κατά proxy URI δεν αλλάζει από μόνη της αυτές τις επιλογές στο όνομα κεντρικού υπολογιστή του proxy και στο Proxy-Authorization.

Επομένως μια ενσωμάτωση proxy χρειάζεται τον σωστό κεντρικό υπολογιστή αιτήματος και αποτέλεσμα περιορισμένο στο proxy για αυτή την ανταλλαγή. Ένα αίτημα HTTPS CONNECT και ένα συνηθισμένο αίτημα προέλευσης μπορεί να έχουν διαφορετικές τιμές κεντρικού υπολογιστή. Επιβεβαιώστε τη συμπεριφορά της εγκατεστημένης υλοποίησης αντί να υποθέσετε ότι ο setter ονόματος υπηρεσίας παρέχει την πλήρη ροή 407.

Για ένα 407, εξετάστε την ανταλλαγή ταυτοποίησης proxy και τον κεντρικό υπολογιστή που χρησιμοποίησε αυτό το αίτημα. Ένα 401 ανήκει στην ταυτοποίηση προέλευσης. Ένα έγκυρο εισιτήριο χρήστη από μόνο του δεν αποδεικνύει ότι το Jetty ζήτησε το σωστό εισιτήριο υπηρεσίας ή ότι ο μεσάζων το δέχτηκε.

Σχετικά άρθρα