Ασφάλεια και μάρκες API
Σύντομη Περίληψη
Η ασφάλεια API είναι μια συλλογή μηχανισμών επαλήθευσης ταυτότητας, αδειοδότησης, κρυπτογραφικής προστασίας, καταπολέμησης της κατάχρησης και παρατήρησης που εξασφαλίζουν ότι ένα αίτημα εκτελεί μια αναμενόμενη οντότητα σε αναμενόμενο πόρο σε αναμενόμενο πλαίσιο. Το βασικό τεχνούργημα είναι ένα σύμβολο (ή ζητήστε υπογραφή) που αποδεικνύει το δικαίωμα κλήσης. Μια καλή αρχιτεκτονική βασίζεται σε βραχύβιες μάρκες, σαφή πεδία εφαρμογής, ελάχιστα προνόμια, προστασία αναπαραγωγής, περιορισμό του ρυθμού και επιχειρησιακές διαδικασίες (περιστροφές, έλεγχοι, περιστατικά).
Μοντέλα πιστοποίησης API - Πότε και τι να επιλέξετε
πλήκτρο API (στατικό μυστικό)
Απλές για ενοποιήσεις μεταξύ επιχειρήσεων και σενάρια χαμηλού κινδύνου. Δεν φέρει το πλαίσιο, απαιτεί αποθήκευση από την πλευρά της υπηρεσίας.
Να χρησιμοποιείται μόνο με κατάλογο αδειών IP/ASN, σταθερές ποσοστώσεις, σύντομη TTL και εναλλαγές.
OAuth 2. 1/OIDC
Πρότυπο για την ενσωμάτωση χρηστών και εταίρων: μάρκα πρόσβασης (βραχυπρόθεσμη) + μάρκα ανανέωσης (περιστροφή) + πεδία εφαρμογής.
Δημόσιοι πελάτες - με PKCE· εμπιστευτικοί πελάτες - με μυστικό πελάτη/mTLS.
Εντολές πελατών (m2m)
: ένδειξη πρόσβασης για υπηρεσίες σε αυστηρά καθορισμένα πεδία και κοινό, συχνά χωρίς ανανέωση (ξαναβρείτε).
mTLS (αμοιβαία TLS)
Δεσμεύει την ταυτότητα στο κανάλι. Ιδανικό για ενοποίηση υψηλού κινδύνου ή πληρωμών (PoP έναντι TLS).
Μπορεί να συνδυαστεί με OAuth (μάρκες μόνο για mTLS πελάτες).
Υπογραφή αίτησης (HMAC/EdDSA)
Όταν χρειάζεστε ένα ανεξάρτητο από τις μεταφορές PoP: κεφαλίδα υπογραφής, χρονοσφραγίδα και nonce. Βολικό για webhooks και offline επαλήθευση.
Μορφότυποι και τύποι αδειών
JWT (JWS, υπογεγραμμένο)
Αυτάρκης, ελέγχεται τοπικά. υποχρεωτικά «is ,» sub «,» au , «exp», «iat», «jti», «scope».
Κίνδυνος - η ανάκληση είναι δυσκολότερη: χρήση σύντομης TTL (5-15 λεπτά) + κατάλογος ανακληθέντων «jti» σε περιστατικά.
JWE (κρυπτογραφημένη JWT)
Απαιτείται εάν το ωφέλιμο φορτίο είναι ευαίσθητο (PII). Κόστος - μεγαλύτερη πολυπλοκότητα και γενικά έξοδα.
Σημεία αναφοράς
Αδιαφανείς αναγνωριστικοί κωδικοί, που ελέγχονται μέσω ενδοσκόπησης από τον εξυπηρετητή εξουσιοδότησης - ευκολότερη ανάκληση/συγκέντρωση.
PoP/DPoP
Η σύνδεση ενός στοιχείου σε ένα κλειδί πελάτη ή σε μια συνεδρία TLS μειώνει την αξία του κλεμμένου στοιχείου.
Περιεχόμενο ένδειξης: Ελάχιστο επαρκές
Συνιστώμενες σφραγίδες (JWT):- «is (εκδότης),» sub «(υποκείμενο),» au (σύστημα-στόχος/πόρος), «exp» (όρος), «iat», «nbf» (προαιρετικό), «jti».
- 'scope '/' άδειες' (ελάχιστες απαιτούμενες), 'ενοικιαστής' (για πολυκατοικία), 'συσκευή _ συμμορφούμενη '/' amr' (μέθοδος εξακρίβωσης της ταυτότητας), 'ip '/' asn' (κατά περίπτωση για την πολιτική).
- Σύντομη TTL για πρόσβαση (5-15 λεπτά), ανανέωση - 12-48 ώρες (με περιστρεφόμενη περιστροφή).
- Το ακροατήριο ('aud') είναι ένας αυστηρά ειδικός πόρος, διαφορετικά το σύμβολο είναι «επαναχρησιμοποιήσιμο».
- Πεδία - δράση και αντικείμενο (για παράδειγμα, "πληρωμές: ανάληψη. ανάγνωση ").
- Μέγεθος - ≤ 2-4 KB για κεφαλίδες και πληρεξούσια. διαφορετικά μπορεί να υπάρξουν προβλήματα με τις πύλες.
Εξουσιοδότηση και πολιτικές
RBAC + ABAC: ρόλος + πλαίσιο (οργάνωση, γεω, κίνδυνος, κατάσταση συσκευής).
Επικύρωση PEP/PDP Token και απόφαση σχετικά με την πύλη API/πληρεξούσιο (απεσταλμένος/OPA) πριν από την υποβολή της αίτησης.
Κανόνες δήλωσης: αποθήκευση σε Git, επιτυχείς έλεγχοι πολιτικής σε CI.
rego package policy. withdraw
default allow = false
allow {
input. token. aud == "wallet-api"
input. token. scope[_] == "payments:withdraw. create"
input. device. compliant == true input. risk. score < 70
}
Υπογραφή αιτήματος (HMAC) και αντι-αναπαραγωγή
Όταν χρειάζεται: webhooks, ενσωμάτωση χωρίς OAuth, διπλός έλεγχος κρίσιμων λειτουργιών.
Σχήμα κεφαλίδας (παράδειγμα):
X-Client-Id: <id>
X-Timestamp: 2025-11-05T13:20:10Z
X-Nonce: 4d1f...a2
X-Signature: base64(HMAC_SHA256(secret, method + "\n" + path + "\n" + sha256(body) + "\n" + timestamp + "\n" + nonce))
Κανόνες:
- Απορρίπτονται οι αιτήσεις με χρονική απόκλιση> ± 300 s.
- Αποθήκευση nonce για 5-15 λεπτά και μη αποδοχή επαναλήψεων (replay cache).
- Υπογράψτε μια κανονικοποιημένη προβολή ερωτημάτων (μέθοδος, διαδρομή, ερώτηση, χασίς σώματος).
Προστασία ταυτότητας και συναλλαγών
Idempotency-Κλειδί για διαγραφή/καταβολή/δημιουργία πράξεων: το ίδιο κλειδί → το ίδιο αποτέλεσμα.
Η βασική διάρκεια ζωής είναι ο ≥ χρόνος λήξης των εργασιών (συνήθως 24-72 ώρες).
Λογική της πλευράς του εξυπηρετητή - Σύγκριση παραμέτρων ερωτήσεων με εκείνες που είχαν δεσμευτεί προηγουμένως για αυτό το κλειδί.
Περιηγητής και πελάτες κινητής τηλεφωνίας
Το PKCE είναι υποχρεωτικό (δημόσιοι πελάτες).
Ανανέωση συμβολοσειράς στο φυλλομετρητή - αποφύγετε; εάν είναι απαραίτητο - απόκριση εκ νέου αναπαραγωγής (ανίχνευση αναπαραγωγής).
Αποθήκευση: αποθήκευση συνεδρίας> τοπική αποθήκευση. καλύτερα - το backend για το frontend (BFF) είναι υπεύθυνο για τις μάρκες.
SameSite, Secure, HttpOnly для cookie; CORS - σαφείς επιτρεπόμενοι κατάλογοι, κεφαλίδες και μέθοδοι· η προφωτογραφία είναι ασφαλής.
m2m και ενοποιήσεις υψηλού κινδύνου
mTLS + OAuth2 Client Certentials with scopes and 'aud'.
Κατάλογος αδειών IP/ASN στην πύλη.
Υπογραφές PoP/DPoP ή HMAC μέσω TLS για κρίσιμες λειτουργίες.
Ποσοστώσεις και όρια συντελεστών ανά οργανισμό/πελάτη/κλειδί.
Περιστροφές, ανακλήσεις και αντίδραση σε περιστατικά
Μυστική και υπογεγραμμένη εναλλαγή κλειδιού (JWKS): προγραμματισμένη + επιβολή σε περιστατικό.
Κυκλοφορία διπλού κλειδιού: δημοσίευση ενός νέου ζεύγους κλειδιών εκ των προτέρων (kid2), υπογραφή των σημάτων για αυτό, διατήρηση του παλιού (kid) για επικύρωση έως ότου εξαντληθεί το TTL.
Ανανέωση-περιστροφή: κάθε ανανέωση ανταλλαγής → ένα νέο σύμβολο, το παλιό αμέσως καθίσταται άκυρο? επανάληψη - συμβιβαστικό σήμα.
Ανάκληση: για την JWT - κατάλογοι ανακληθέντων «jti» για σύντομο χρονικό διάστημα· για τις μάρκες αναφοράς - άμεσος αποκλεισμός σε AS.
Σενάρια από γυαλί θραύσης: προσωρινές στατικές πιστώσεις με ελάχιστα δικαιώματα και σκληρό TTL, εγγραφή στο ημερολόγιο.
Περιορισμός ταχύτητας, προστασία bot και προστασία ωμής δύναμης
Όρια τριών επιπέδων: ανά κλειδί/ανά IP/ανά οργάνωση.
Διάρρηξη + διατήρηση: συμβολική δεξαμενή/συρόμενο παράθυρο.
Σύνθετοι έλεγχοι: δακτυλικά αποτυπώματα συσκευής, σήματα συμπεριφοράς, ανωμαλίες γεω-/ASN, CAPTCHA μόνο για UI.
Κλείδωμα/επιβράδυνση κατά την επαναδιαπραγμάτευση υπογραφής/NMAC και απόπειρες επαλήθευσης ταυτότητας.
Καταγραφή, μετρήσεις και SLO
Το ελάχιστο σύνολο αρχείων καταγραφής: "request _ i ," client _ i , "sub", "au ," scope "," decision "," region "," jti "," ip "," asn "," latency "," quality _ state ".
Μετρήσεις:- Επιτυχία επικύρωσης σημάτων (%), χρόνος επαλήθευσης p95.
- Συχνότητα των αποκλίσεων αναπαραγωγής, αντίγραφα του Idempotency-Key.
- Ποσοστό αιτήσεων με PoP/DPoP/mTLS.
- 'aud/scope' errors, exp 'exp', time shifts (NTP).
- Διαθεσιμότητα Auth/AS ≥ 99. 95 %/μήνα, p95 ενδοσκόπηση ≤ 50 мс.
- Μηδενικές μάρκες με TTL <60 s σε prod (μετρικό φρουράς).
- Λιγότερο από 0. 1% των σφαλμάτων «aud/scope» ανά ημέρα (ποιότητα ολοκλήρωσης).
Παραδείγματα διαμόρφωσης
Απεσταλμένος: JWT και έλεγχος ακροατηρίου
yaml http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
providers:
as:
issuer: https://auth. example. com/
audiences: ["wallet-api"]
remote_jwks:
http_uri:
uri: https://auth. example. com/.well-known/jwks. json cluster: jwks_cluster cache_duration: 600s rules:
- match: { prefix: "/v1/withdraw" }
requires:
provider_and_audiences:
provider_name: as audiences: ["wallet-api"]
NGINX: υποστήριξη mTLS
nginx proxy_ssl_server_name on;
proxy_ssl_name wallet. internal;
proxy_ssl_certificate /etc/nginx/mtls/client. crt;
proxy_ssl_certificate_key /etc/nginx/mtls/client. key;
proxy_ssl_trusted_certificate /etc/nginx/mtls/ca. crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 2;
Παράδειγμα κεφαλίδας υπογραφής (webhooks)
X-Signature: t=1730803210,n=ac12...,s=base64(HMAC_SHA256(secret, "POST\n/webhook\nsha256(body)\n1730803210\nac12..."))
Ο εξυπηρετητής απορρίπτει αν το 't' είναι παλαιότερο από 300 c, το 'n' έχει ήδη εκπληρωθεί, ή ' δεν νικάει.
Προστασία δεδομένων και ιδιωτική ζωή
Ελαχιστοποίηση σημάτων (ειδικά PII) και διάρκειας ζωής.
Κρυπτογράφηση ευαίσθητων γραμματοσήμων (JWEs) για ενσωμάτωση τρίτων.
Μάσκα/DLP σε αρχεία καταγραφής: μην συνδεθείτε με πτώματα με PAN/PII, μάρκες - μόνο «παιδί »/σημαίες, όχι το ίδιο το μυστικό.
Κοινά σφάλματα
Μακροχρόνιες μάρκες πρόσβασης και «αιώνια» ανανέωση.
Απουσία "au /" εμβέλειας" οι μάρκες είναι πολλαπλού σκοπού.
Υπογραφή webhooks χωρίς 'χρονοσφραγίδα '/' nonce'.
Έλεγχος JWT μόνο στην αίτηση, όχι στην πύλη (PEP).
Καμία περιστροφή και διάδοση διπλού κλειδιού.
«CORS» και επιτρεπόμενες επισφαλείς μέθοδοι χωρίς έλεγχο κεφαλίδας.
Αποθήκευση σημάτων σε «localStorage» χωρίς BFF.
Χάρτης πορείας για την εφαρμογή
1. Απογραφή και ταξινόμηση API (δημόσιο/εταίρος/εσωτερικό, ευαισθησία).
2. Επιλογή μοντέλου AuthN: OAuth2/OIDC για προσαρμοσμένα, mTLS + Πιστωτικά Πελάτη/HMAC για m2m.
3. Μάρκες: σύντομο TTL, αυστηρό 'aud', πεδίο εφαρμογής, DPoP/PoP για κρίσιμες λειτουργίες.
4. PEP στις πύλες: επικύρωση JWT, υπογραφές και όρια ταχύτητας στην εφαρμογή.
5. Αντι-αναπαραγωγή και ιδεατότητα: χρονοσφραγίδα/nonce/Idempotency-Key.
6. Περιστροφές και JWKS: διπλή κλείδα, αυτοματοποίηση και προειδοποίηση.
7. Παρατηρησιμότητα: μετρήσεις/SLO, αρχεία καταγραφής πρόσβασης, σήματα UEBA.
8. Ασκήσεις: πλήκτρο υπογραφής, διαρροή ανανέωσης, υπερφόρτωση ποσοστώσεων.
Ιδιαιτερότητα για iGaming/fintech
Πληρωμές/πληρωμές: mTLS + PoP/HMAC μόνο, αυστηρά πεδία εφαρμογής ("αποσύρετε. δημιουργία "), απαιτείται η ιδιαιτερότητα.
Εταίροι (πάροχοι υπηρεσιών PSP/περιεχομένου): κλειδιά/πιστοποιητικά ανά εταίρο, κατάλογος αδειών IP/ASN, επιμέρους ποσοστώσεις και ταμπλό.
GDPR/PCI DSS: ελαχιστοποίηση γραμματοσήμων, απαγόρευση PII σε μάρκες τρίτων, καταγραφή πρόσβασης σε ευαίσθητους πόρους, τακτική επανεξέταση πρόσβασης.
Καταπολέμηση της κατάχρησης: όρια συμπεριφοράς, γεω-έλεγχος, προστασία από κατάχρηση μπόνους σε επίπεδο API.
ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ
JWT ή σύμβολο αναφοράς
JWT - επιδόσεις και αυτονομία· αναφορά - κεντρική ανατροφοδότηση και απλότητα της αντίδρασης σε περιστατικά. Συχνά ένα υβρίδιο: εξωτερική - JWT, εσωτερική - αναφορά.
Χρειάζεται η JWE
Μόνο εάν το ωφέλιμο φορτίο περιέχει PII/μυστικά. Διαφορετικά - JWS με ελάχιστα χαρακτηριστικά.
Μπορώ να ζήσω με κλειδιά API
Ναι, αλλά μόνο με σύντομο TTL, αυστηρές ποσοστώσεις, κατάλογο αδειών IP και υπογραφή αιτήματος. Για τους χρήστες, προτιμάται το OAuth/OIDC.
Υποχρεωτικό DPoP/PoP
Όχι πάντα. Ωστόσο, για τις πράξεις υψηλού κινδύνου (πληρωμές, συμπεράσματα) είναι ιδιαίτερα επιθυμητή.
Σύνολο
Αξιόπιστη ασφάλεια API βασίζεται σε βραχύβιες μάρκες, ακριβή πεδία εφαρμογής και ακροατήρια, ασφαλή κανάλια (TLS/mTLS), αίτηση υπογραφής και αυστηρή προστασία κατά της αναπαραγωγής, ενισχυμένη από όρια και παρατηρησιμότητα. Προσθήκη αυτόματων περιστροφών, διπλού κλειδιού και πολιτικού ελέγχου στις πύλες - και η API σας θα είναι ανθεκτική σε διαρροές, επαναλήψεις και καταχρήσεις, διατηρώντας παράλληλα υψηλές επιδόσεις και διαχειριστικότητα.