Το OAuth 2.0 προσφέρει πολλαπλές λειτουργίες εξουσιοδότησης, μεταξύ των οποίων η Εκχώρηση Κωδικού Εξουσιοδότησης είναι η πιο συχνά χρησιμοποιούμενη και ασφαλής. code_challenge είναι μια δυνατότητα ενισχυμένης ασφάλειας σε αυτήν τη λειτουργία, που χρησιμοποιείται κυρίως για τον μηχανισμό PKCE (Proof Key for Code Exchange).
Τι είναι το PKCE;
Το PKCE (Proof Key for Code Exchange) είναι μια επέκταση που έχει σχεδιαστεί για να βελτιώνει την ασφάλεια του μοτίβου κωδικού εξουσιοδότησης OAuth 2.0, ειδικά όταν χρησιμοποιείται σε δημόσιους πελάτες, όπως εφαρμογές JavaScript ή εφαρμογές για κινητά που εκτελούνται σε προγράμματα περιήγησης. Το PKCE αποτρέπει την υποκλοπή και την κακή χρήση κωδικών εξουσιοδότησης προσθέτοντας ένα επιπλέον βήμα ελέγχου ταυτότητας στα αιτήματα εξουσιοδότησης.
code_challenge Ρόλος
code_challenge αποτελεί μέρος του μηχανισμού PKCE, που δημιουργείται και αποστέλλεται κατά τη φάση του αιτήματος εξουσιοδότησης. Βασίζεται σε μια μυστική τιμή (που ονομάζεται code_verifier), η οποία μετασχηματίζεται από έναν αλγόριθμο κατακερματισμού όπως ο S256. Ο σκοπός του code_challenge είναι να παρέχει μια βάση επικύρωσης για επόμενα αιτήματα διακριτικών χωρίς να εκθέτει άμεσα το code_verifier.
Παραγωγή και χρήση code_challenge και code_verifier
Γενιά code_verifier: code_verifier είναι μια συμβολοσειρά υψηλής εντροπίας, που δημιουργείται τυχαία,Μήκος χαρακτήρων (μεταξύ 43 και 128). Η προεπιλεγμένη τιμή είναι 43。
Γενιά code_challenge: Χρησιμοποιώντας code_verifier, code_challenge δημιουργείται μέσω ενός αλγόριθμου κατακερματισμού (όπως το S256). Για το S256, code_challenge είναι η κωδικοποίηση URL Base64 της τιμής κατακερματισμού code_verifier SHA-256, αλλά ο χαρακτήρας πλήρωσης = από την κωδικοποίηση πρέπει να αφαιρεθεί και το μήκος εξόδου πρέπει να είναι 43 χαρακτήρες (καθώς μετά την κωδικοποίηση URL Base64, κάθε 4 χαρακτήρες αντιπροσωπεύει 3 byte, αλλά το τελευταίο μπλοκ χαρακτήρων μπορεί να είναι μικρότερο από 4 χαρακτήρες, επομένως το μήκος μπορεί να διαφέρει ελαφρώς μετά την αφαίρεση = χαρακτήρες).
Χρησιμοποιήστε code_challenge σε αιτήματα εξουσιοδότησης: Κατά την εκκίνηση μιας αίτησης εξουσιοδότησης, code_challenge αποστέλλεται ως μία από τις παραμέτρους της αίτησης στο διακομιστή εξουσιοδοτήσεων.
Χρήση code_verifier σε αιτήματα διακριτικών: Όταν ο διακομιστής εξουσιοδοτήσεων επιστρέφει τον κωδικό εξουσιοδότησης, ο υπολογιστής-πελάτης χρησιμοποιεί αυτόν τον κωδικό μαζί με το code_verifier που δημιουργήθηκε προηγουμένως για να ζητήσει πρόσβαση στο τελικό σημείο διακριτικού. Ο διακομιστής εξουσιοδοτήσεων επαληθεύει εάν το code_challenge και το code_verifier ταιριάζουν, διασφαλίζοντας ότι το αίτημα εκκινείται από τον αρχικό υπολογιστή-πελάτη.
Γενιά PKCE
Διαδικτυακά εργαλεία δημιουργίας PKCE:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Ο κωδικός C# δημιουργείται ως εξής:
Οπως φαίνεται παρακάτω:
Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή. |