Επαλήθευση ταυτότητας API: OAuth2, JWT, HMAC
TL, DR
+ JWT είναι ένα πρότυπο για εφαρμογές πελατών και ενσωμάτωση διακομιστή με πολύπλοκη εξουσιοδότηση (scopes/ρόλους/ενοικιαστές), SSO και σύντομες μάρκες TTL.
Οι υπογραφές HMAC είναι η καλύτερη επιλογή για webhooks και απλές κλήσεις συνεργατών «server→server» με αποφασιστική επαλήθευση και ισχυρή προστασία από την επανάληψη.
Ενίσχυση της ασφάλειας: mTLS ή DPoP (περιορισμένες μάρκες αποστολέων), σύντομη TTL (5-15 λεπτά), εναλλαγή κλειδιού (JWKS), μάρκες ανανέωσης με περιστροφή/αντι-επαναχρησιμοποίηση, αυστηρή επικύρωση 'aud/iss/exp/nbf/kid' and policy-as-code την πύλη.
1) Χάρτης λύσεων: τι να εφαρμοστεί όπου
2) OAuth2/OIDC: ροές και πελάτες
2. 1 Ροές
Κωδικός έγκρισης + PKCE (Web/Mobile) - Προστατεύει τον κωδικό έγκρισης από την παρακολούθηση.
Εντολές πελατών: server↔server χωρίς χρήστη. πεδία - ελάχιστα απαιτούμενα.
Κωδικός συσκευής: για συσκευές χωρίς περιηγητή.
Ανανέωση του Token: μόνο για έμπιστους πελάτες. να περιστρέφεται και να καθίσταται δυνατή η ανίχνευση επαναχρησιμοποίησης.
2. 2 Τύποι πελατών
Εμπιστευτικό (εξυπηρετητές, BFF): κρατούν μυστικά. χρήση του mTLS.
Δημόσιο (SPA/κινητό): το μυστικό δεν μπορεί να αποθηκευτεί → PKCE, DPoP, σύντομο TTL και περιορισμένα πεδία.
3) JWT: δομή, χρονοδιάγραμμα, επαλήθευση
3. 1 Πεδία (απαιτήσεις)
Υποχρεωτικό: «is ,» sub «,» au , «exp», «iat», «nbf», «jti», «scope »/« perciples», «penant» (εάν πρόκειται για πολλαπλά μισθώματα), «παιδί».
3. 2 Διάρκεια ζωής
Μάρκα πρόσβασης: 5-15 λεπτά.
Μάρκα ανανέωσης: ημέρες/εβδομάδες, εναλλάσσονται με κάθε ανταλλαγή. κατά την εκ νέου υποβολή του παλαιού, μπλοκάρουμε τη συνεδρίαση.
Ανοχή ≤ 60 s
3. 3 JWKS και κλειδιά
Αποθήκευση κλειδιών στο KMS/Vault, απαιτείται 'παιδί'.
Δύο ενεργά κλειδιά (κυλώντας), επανεκδίδονται μία φορά κάθε 60-90 ημέρες ή σε περιστατικό.
Κρύπτη JWKS στην πύλη ≤ 5 λεπτά, με αυτόματη αναπηρία.
3. 4 Επαλήθευση πύλης/υπηρεσιών
Έλεγχος: υπογραφή, «au (εγκεκριμένες υπηρεσίες),» is , «exp/nbf», κατάλογος κλειδαριών (ανάκληση).
Μη εμπιστεύεστε πεδία από τον φορέα χωρίς να επαληθεύσετε την υπογραφή. αγνοούν το 'alg = κανένα'.
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
4) Δεσμευτικό σύμβολο για τον πελάτη: mTLS, DPoP
mTLS (πιστοποιητικά πελατών TLS): η μάρκα εκδίδεται και επικυρώνεται μόνο εάν υπάρχει πιστοποιητικό πελάτη → η μάρκα είναι άχρηστη εκτός του συνδυασμού πιστοποιητικού κλειδιού +.
DPoP (Απόδειξη της απόδειξης της κατοχής): ο πελάτης υπογράφει κάθε αίτημα με μια εφάπαξ βασική προστασία → από την επανάληψη και την κλοπή σε δημόσιους πελάτες.
Για κρίσιμες οδούς (μεταλλάξεις πληρωμών) - απαιτείται ένας από τους μηχανισμούς.
5) Εξουσιοδότηση: πεδία εφαρμογής, ρόλοι, ABAC
Πεδία - ελάχιστες δράσεις («πληρωμές: εγγραφή», «πληρωμές: κατάσταση: ανάγνωση»).
Ρόλοι - μονάδες για τους διαχειριστές· να μην τα χρησιμοποιείτε απευθείας χωρίς πεδία εφαρμογής.
ABAC - χαρακτηριστικά στο συμβολικό («ενοικιαστής», «χώρα», «kyc _ level», «risk _ flags») → πολιτικές πύλης/OPA.
Πολιτική σε επίπεδο διαδρομής/πεδίου (GraphQL) και σε επίπεδο λειτουργίας τομέα (REST/gRPC).
6) Υπογραφές HMAC: webhooks και εταίροι
6. 1 Έννοια
Κάθε ολοκλήρωση έχει το δικό της μυστικό.
Λεζάντα πάνω από την κανονική γραμμή: 'timestamp + «\n «+ μέθοδος + «\n »+ διαδρομή + «\n «+ sha256 (σώμα) '
Τίτλοι:
X-Signature: v1=base64(hmac_sha256(secret, canonical_string))
X-Timestamp: 2025-11-03T12:34:56Z
X-Event-Id: 01HF...
Χρονικό παράθυρο: ≤ 300 δευτερόλεπτα. Απόρριψη αιτημάτων με λήξη/μελλοντική «X-Timestamp».
Idempotence: Αποθηκεύει το «X-Event-Id» στο TTL (24h) - απορρίπτει αντίγραφα.
6. 2 Βέλτιστες πρακτικές
Μυστικά στο KMS/Vault, περιστρεφόμενα κάθε 90 ημέρες.
Για τους δημόσιους πελάτες, το HMAC δεν είναι κατάλληλο (οι μυστικές διαρροές)· χρήση OAuth2/DPoP.
7) Προστασία από επανάληψη, ωμή δύναμη και διαρροές
Nonce/« jti »για ευαίσθητες εργασίες, μαύρη λίστα χρησιμοποιημένων αναγνωριστικών.
Ποσοστό/ποσοστώσεις: ανά κλειδί/πελάτη/ενοικιαστή/δρομολόγιο· Οι «δαπανηρές» εργασίες είναι χωριστές ποσοστώσεις.
IP/ASN/Geo επιτρεπόμενες λίστες για συνεργάτες και webhooks.
Ο τύπος περιεχομένου επιτρέπει ('application/json'), όριο μεγέθους σώματος.
Απόκρυψη PII σε κούτσουρα; απαγόρευση καταγραφής σημάτων/μυστικών.
8) Σφάλματα και απαντήσεις (ενιαία μορφή)
Δομή σφάλματος:json
{
"error": "invalid_token",
"error_description": "expired",
"trace_id": "4e3f-..."
}
Κατάσταση:
- '401' - όχι/άκυρο σύμβολο (WWW-Authenticate).
- '403' - ανεπαρκή δικαιώματα (πεδίο εφαρμογής/ABAC).
- '429' - όρια/ποσοστώσεις.
- gRPC: «ΜΗ ΕΞΟΥΣΙΟΔΟΤΗΜΕΝΗ »/« ΑΔΕΙΑ _ ΑΠΟΡΡΙΦΘΗΚΕ »/« ΠΌΡΟς _ ΕΞΑΝΤΛΗΜΕΝΗ».
9) Πολιτικές θητείας και συνόδου
Πρόσβαση ≤ 15 λεπτά. Ανανέωση - εναλλαγή + επαναχρησιμοποίηση ανίχνευσης (υποβλήθηκε παλαιά - ανάκληση συνεδρίας).
Webhooks HMAC: Υπογραφές TTL ≤ 5 λεπτά; επαναλαμβανόμενη παράδοση με εκθετική εφεδρεία.
Συνεδρία/ανάκληση κλειδιού → άμεση εισαγωγή στον κατάλογο ανάκλησης (κρύπτη στην πύλη ≤ 1 λεπτό).
10) Παρατηρησιμότητα και λογιστικός έλεγχος
Συσχέτιση με 'trace _ id '/' span _ id'.
Μετρήσεις: ρυθμός επιτυχίας auth, '401/403/429', καθυστέρηση OIDC/JWKS, συχνότητα περιστροφής, ανανέωση επαναχρησιμοποίησης, μερίδιο κυκλοφορίας DPoP/mTLS.
Αρχείο ελέγχου: «ποιος, πότε, με ποιον» υπο/ενοικιαστή/πεδίο εφαρμογής «προκάλεσε τι», βασικές/μυστικές αλλαγές, απέτυχε στις υπογραφές HMAC.
11) Ενσωμάτωση στην Πύλη API
επικύρωση JWT (μνήμη JWKS) και OPA/ABAC στην πύλη.
προφίλ mTLS για έμπιστους πελάτες/εταίρους.
Επαλήθευση HMAC των webhooks στα άκρα (πριν από τις εσωτερικές υπηρεσίες).
Πολιτικές ποσοστώσεων, διακόπτης κυκλώματος στον πάροχο OIDC (cache JWK).
Σημαίες χαρακτηριστικών: γρήγορη αποσύνδεση του πελάτη/κλειδιού, αλλαγή του αλγορίθμου υπογραφής.
12) Mini snippets
Ψευδοεφεδρεία: επαλήθευση JWT
pseudo jwks = cache. getOrFetch(iss + "/.well-known/jwks. json")
key = jwks[kid]
assert verify_signature(jwt, key)
assert aud in ALLOWED_AUDIENCES and iss in TRUSTED_ISSUERS assert now in [nbf-60s, exp+60s]
Ψεύδος: έλεγχος HMAC webhook
pseudo canonical = timestamp + "\n" + method + "\n" + path + "\n" + sha256(body)
sig = base64(hmac_sha256(secret, canonical))
assert abs(now - timestamp) <= 300 assert not seen(event_id)
assert timingSafeEqual(sig, header["X-Signature"].split("v1=")[1])
markSeen(event_id, ttl=86400)
Παράδειγμα πολιτικής πεδίου εφαρμογής (ιδέα OPA/Rego)
rego allow {
input. jwt. scope[_] == "payments:write"
input. jwt. tenant == input. route. tenant
}
13) Βιβλία παιχνιδιών περιστατικών
Διαρροή ιδιωτικού κλειδιού/υπογράφων JWT: επανέκδοση κλειδιού, ενημέρωση JWKS, άμεση απενεργοποίηση του παλιού (άρνηση «παιδιού»), ανανέωση αναπηρίας, αναγκαστική σύνδεση.
Αντικατάσταση των webhooks: περιστροφή των μυστικών, λίστα αδειών IP, ενίσχυση του παραθύρου 'X-Timestamp', επαναλαμβανόμενη παράδοση των χαμένων γεγονότων.
Επανάληψη/ωμή δύναμη: ενεργοποίηση DPoP/mTLS σε κρίσιμες διαδρομές, στενές ποσοστώσεις, προσωρινά μπλοκ από IP/ASN, ενεργοποίηση λίστας μπλοκ 'jti'.
OIDC εξόδου: υποβάθμιση των κλειδωμένων μαρκών (χάρη), πάροχος διακόπτη κυκλώματος, ειδοποίηση πελάτη.
14) Κατάλογοι ελέγχου εφαρμογής
Επαλήθευση ταυτότητας (ελάχιστο):- OAuth2: Code + PKCE (Web/Mobile), Client Certentials (server-to-server)
- TTL: Πρόσβαση ≤ 15 λεπτά, ανανέωση με εναλλαγή και ανίχνευση επαναχρησιμοποίησης
- JWKS: δύο ενεργά κλειδιά, «παιδί», κρύπτη ≤ 5 λεπτά
- Webhooks: HMAC v1, 'X-Timestamp', 'X-Event-Id', window ≤ 300 sec, idempotency
- Περιορισμός αποστολέα: mTLS/DPoP σε κρίσιμες διαδρομές
- ABAC/OPA: πεδία εφαρμογής + ενοικιαστής/κίνδυνος στις πολιτικές πύλης
- Συντελεστής/ποσόστωση 429 ευρώ. Επιτρεπόμενοι κατάλογοι IP/ASN για τους εταίρους
- Έλεγχος και καταχωρίσεις (401/403/429, επαναχρησιμοποίηση ανανέωσης, υπογραφές HMAC)
- Μην καταγράψετε μάρκες/μυστικά/σώματα πλήρους κάρτας
- απόκρυψη PII; υποστήριξη DSAR· η διάρκεια ζωής των κορμών είναι περιορισμένη
15) Αντι-μοτίβα
'alg = κανένα' ή εμπιστεύεστε ένα σύμβολο χωρίς επαλήθευση υπογραφής/JWKS.
Μάρκες πρόσβασης μακράς διάρκειας (ώρες/ημέρα).
Ένα κοινό μυστικό HMAC για όλους τους εταίρους.
Webhooks χωρίς χρονοσφραγίδα/ταυτότητα.
Ανανεώστε τις μάρκες χωρίς περιστροφή και χωρίς επαναχρησιμοποίηση.
Έλλειψη επικύρωσης "au /" iss" και περιστροφή "παιδί".
Αποθήκευση μυστικών σε περιβαλλοντικές μεταβλητές χωρίς KMS/θησαυροφυλάκιο.
16) NFT/SLO (ορόσημα)
Διαθεσιμότητα OIDC/JWKS ≥ 99. 95% (η κρύπτη των άκρων μειώνει την εξάρτηση).
Πρόσθετη ύλη επικύρωσης JWT στην πύλη ≤ 2-5 ms p95.
Σφάλματα ταυτοποίησης ('401') ≤ 0. 5% της συνολικής κυκλοφορίας (εξαιρουμένων των ρομπότ).
Υπογεγραμμένα webhooks: μερίδιο των επιτυχώς επαληθευμένων ≥ 99. 9%, μέση καθυστέρηση παράδοσης ≤ 3 s.
Περίληψη
Συνδυασμός μηχανισμών: OAuth2/OIDC + JWT για χρήστες και πλούσια σενάρια διακομιστή, HMAC για webhooks/απλούς συνεργάτες, και για κρίσιμες λειτουργίες - mTLS/DPoP. Διατήρηση σύντομων TTL, βασικών περιστροφών (JWKS), αυστηρών πολιτικών ABAC/OPA, προστασία βρόχων από επαναλήψεις και διαρροές, και αυτοματοποίηση των πάντων σε επίπεδο πύλης API. Έτσι η εξακρίβωση της ταυτότητας θα γίνει προβλέψιμη, κλιμακωτή και ασφαλής - χωρίς συμβιβασμούς για UX και νομιμοποίηση.