GH GambleHub

پلاگین ها و میان افزار در API دروازه

1) چرا شما نیاز به پلاگین ها و middleware

دروازه API - یک نقطه اجرای سیاست های شرکت های بزرگ. زنجیره پلاگین به درستی مونتاژ شده است:
  • استاندارد ایمنی (authN/authZ، WAF، CORS)،
  • از ثبات (محدودیت نرخ، قطع کننده مدار، سیاست های مجدد) محافظت می کند،
  • مدیریت قرارداد (اعتبار سنجی طرح ها، تحولات)،
  • قابلیت مشاهده (معیارها، سیاههها، ردیابی) را می دهد،
  • کاهش هزینه (ذخیره، deduplication، قوانین قناری)

کلید: حداقل تاخیر و سازگاری برنامه روشن.

2) کلاس های پلاگین و آنچه انجام می دهند

1. شناسایی/احراز هویت

JWT/JWKS ارائه دهندگان، OAuth2/OIDC، کلید های API، mTLS (cert مشتری).
امضاهای HMAC (webhooks/partners)، DPoP/PoP در لبه.

2. مجوز گرفتن

RBAC/ABAC/OPA/سرو (PDP) با کش راه حل محلی.
BOLA-guard: چک کردن «مستاجر »/« مالک» در هدر/زمینه.

3. حفاظت از شبکه و پروتکل

WAF (OWASP CRS)، ضد رباتها (نرخ/رفتاری)، فیلترهای Geo/IP/ASN، پروفایل های TLS.
CORS، هدر CSP، فیلترهای Fetch-Metadata، CORP/COOP/COEP.

4. ثبات

محدود کردن نرخ (token bucket/GCRA)، سهمیه و رقابت.
قطع کننده مدار، قطع وقت، همزمانی تطبیقی، ریختن بار.
سیاست تلاش مجدد با هر سعی timeout و jitter.

5. تحولات و اعتبارسنجی

مسیر/سربرگ سرشماری، بدن بازنویسی، JSON/XML ↔، gRPC ↔ HTTP.
اعتبار سنجی طرح (OpenAPI/JSON طرح/Protobuf)، نرمال سازی ID.

6. ذخیره سازی و عملکرد

پاسخ/قطعه کش، ETag/If-None-Match، فشرده سازی، brotli.
درخواست فروپاشی) ادغام (برای کلیدهای یکسان.

7. قابلیت مشاهده و حسابرسی

معیارهای RED/USE، ثبت تصمیم (429/403/5xx)، ردیابی (W3C Trace-Context/OpenTelemetry)، نمونه برداری (tail/adaptive).
هدرهای امنیتی و نسخه های سیاست را بررسی کنید.

8. چرخه عمر و بهره برداری

Canary/blue-green, feature-flags, shadow solutions (log, not apply), version migrations.

3) روش استفاده (زنجیره توصیه شده)


[Ingress TLS]
→ Early-Deny (ASN/Geo, IP allow/deny)
→ mTLS / Client Cert Auth
→ JWT/OAuth2 AuthN (JWKS cache)
→ OPA/ABAC AuthZ (solution cache)
→ Rate Limit / Concurrency
→ Circuit / Timeout / Retries (пер-try)
→ Schema Validation (request)
→ Transform (headers/path/body) / CORS
→ Caching (lookup)
→ Upstream Proxy (app)
← Caching (store) / Compression
← Response Transform / Schema Validation (response)
← Logging / Tracing / Metrics / Security Headers

اصل: زودتر - ارزان تر/کشنده تر (انکار، auth، محدودیت)، بعد - «لوازم آرایشی» (تحول، کش).

4) عملکرد و کاردینالیتی

به مراحل O (1) بدون درخواست های خارجی در جاده گرم بروید.
تمام پلاگین «تماس های خارجی» (PDP/JWKS) از طریق TTL کوتاه و تازه سازی ناهمزمان است.
برچسب ها/برچسب ها برای معیارها - کاردینالیتی محدود («مستاجر»، «برنامه»، «مسیر»، اما «کاربر _ شناسه»).
پلاگین های «سنگین» (WAF، body-transform) - انتخاب هر مسیر را فعال کنید.

5) نمونه های پیکربندی

5. 1 نماینده: JWT + RateLimit + OPA + Retries (شبه)

yaml static_resources:
listeners:
- name: public_listener filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
name: main virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match: { prefix: "/v1/payments" }
route:
cluster: payments timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx,gateways num_retries: 1 per_try_timeout: 200ms http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
providers:
oidc:
issuer: https://auth. example. com/
remote_jwks:
http_uri: { uri: https://auth. example. com/.well-known/jwks. json, cluster: jwks, timeout: 2s }
cache_duration: 300s forward: true
- name: envoy. filters. http. ext_authz  # OPA/Cedar PDP typed_config:
http_service:
server_uri: { uri: http://opa:8181, cluster: opa, timeout: 50ms }
authorization_request: { allowed_headers: { patterns: [{ exact: "authorization" }, { exact: "x-tenant" }] } }
- name: envoy. filters. http. ratelimit typed_config:
domain: public-api rate_limit_service:
grpc_service: { envoy_grpc: { cluster_name: rl } }
- name: envoy. filters. http. router

5. 2 NGINX/OpenResty: HMAC + Lua + Redis (شبه)

nginx lua_shared_dict jwks 10m;
lua_shared_dict limits 10m;

server {
listen 443 ssl http2;

Early deny by ASN/Geo if ($bad_asn) { return 403; }

HMAC signature check (webhooks/partners)
set_by_lua_block $sig_ok {
return verify_hmac_signature(ngx. var. http_x_signature, ngx. var. request_time, ngx. var. request_body)
}
if ($sig_ok = 0) { return 401; }

Token bucket in Redis access_by_lua_block {
local key = ngx. var. binary_remote_addr.. ":".. ngx. var. request_uri local allowed, retry_after = ratelimit_allow(key, 50, 100)
if not allowed then ngx. header["Retry-After"] = retry_after return ngx. exit(429)
end
}

proxy_read_timeout 300ms;
proxy_connect_timeout 100ms;
proxy_pass http://app_backend;
}

5. 3 کنگ: پلاگین در طول مسیر

yaml services:
- name: payments url: http://payments:8080 routes:
- service: payments paths: ["/v1/payments"]
plugins:
- name: jwt config: { key_claim_name: kid, secret_is_base64: false, run_on_preflight: false }
- name: opa config: { server_url: "http://opa:8181/v1/data/authz/allow", timeout: 50 }
- name: rate-limiting config: { second: 50, policy: redis, redis_host: redis, fault_tolerant: true }
- name: correlation-id config: { header_name: "traceparent" }
- name: response-transformer config: { add: { headers: ["Strict-Transport-Security:max-age=31536000"] } }

5. 4 آپاچی APISIX: JWT + محدود + پروکسی آینه (سایه)

yaml routes:
- uri: /v1/wallets/
plugins:
openid-connect:
client_id: wallet discovery: "https://auth. example. com/.well-known/openid-configuration"
scope: "openid"
limit-count:
count: 100 time_window: 60 key_type: "var"
key: "remote_addr"
proxy-mirror:          # shadow traffic host: "http://shadow-backend:8080"
upstream_id: 1

5. 5 Traefik: زنجیره ای میان افزار

yaml http:
middlewares:
hsts-headers:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true ratelimit:
rateLimit:
average: 50 burst: 100 routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: app middlewares:
- hsts-headers
- ratelimit

6) چند اجاره و نسخه های سیاست

کلید مسیریابی: {مستاجر، طرح، منطقه، مسیر، نسخه}.
پلاگین ها «tenant» را از تمبر/سربرگ mTLS SAN/JWT → محدودیت ها/سهمیه ها/قوانین را به مستاجر اعمال می کنند.
سیاستهای نسخه ('policy _ version')، changelog و اجرای canary را وارد کنید.

7) تست و رول

قبل از انتشار

تست های زنجیره قرارداد (جدول if-then): auth → deny, auth → allow, rate → 429, schema → 422.
بارگذاری: انفجار × 10، فلات طولانی، الگوهای «کثیف» (آهسته POST).
هرج و مرج: تخریب PDP/JWKS/Redis - باید بسته/تخریب به حداقل امن باشد.

انتشار

'فقط گزارش '/حالت سایه (ورود به سیستم راه حل بدون نرم افزار).
ترافیک قناری 1-5٪ + مقایسه متریک (p95/p99، 4xx/5xx/429).
بازگشت خودکار در SLO/هشدار.

8) قابلیت مشاهده و معیارها

معیارها:
  • 'http _ requests _ total {مسیر، مستاجر، طرح، وضعیت}'
  • 'request _ duration _ seconds _ bucket {route}' (p95/p99)
  • 'rate _ limited _ total {policy}', 'retry _ total {reason}', 'circuit _ state'
  • 'athn _ fail _ total {reason}', 'authz _ denied _ total {action}'
  • 'schema _ validation _ fail _ total {route}'
  • Traces: spans per-filter, attributes 'policy _ version', 'tenant', 'limit _ key'.
  • سیاهههای مربوط (نمونه برداری): انکار/429/5xx راه حل با علل و 'ردیابی _ id'.
  • داشبورد: خلاصه exec، per-route، per-tenant، سیاستمداران «داغ».

9) ایمنی و بهره برداری

تمام اسرار (HMAC، خصوصی JWKS، کلیدهای API) - در KMS/Vault، نه در فایل های پیکربندی.
سیاست انکار به طور پیش فرض برای مسیرهای حساس.
حافظه کوتاه TTL JWKS/PDP، به روز رسانی ناهمزمان با عقب نشینی.
مهاجرت طرح های تحول - نسخه ؛ «شکستن» - از طریق نوشتن دوگانه.
اندازه بدن (DoS) و عمق JSON را محدود کنید.

10) ضد گلوله

یک مجموعه جامع از پلاگین ها در هر مسیر → میلی ثانیه و صورتحساب اضافی.
وابستگی های خارجی از پلاگین بدون کش/زمان → زمان آبشار.
عدم نظم فیلتر: اولین تحول/منطق، سپس محدودیت - نادرست است.
کاردینالیتی بالای برچسبهای متریک (خام 'user _ id '/' ip').
مخلوط کردن authN/authZ در الگوهای تحول (راه حل های ضمنی در Lua/Jinja).
رمز ورود/نشانه.
یک Redis جهانی/خوشه برای همه محدودیت ها بدون shardiness/ذخیره.

11) ویژگی های iGaming/امور مالی

قوانین مربوط به هر مستاجر/هر حوزه قضایی: KYC/AML، تحریم ها، محدودیت های پرداخت های مسئول.
سیاست های سخت برای مسیرهای پرداخت: زمان کوتاه، یک تکرار، idempotency ('Idempotency-Key').
محدوده های تقسیم شده برای PSP/KYC SDK (دامنه های جداگانه/زنجیره های پلاگین).
حسابرسی از سیاهههای مربوط تصمیم غیر قابل تغییر (نتیجه گیری، مسدود کردن، امتناع تحریم).

12) تولید لیست آمادگی

  • ترتیب فیلتر عبارت است از authN → authZ → limits → circuit/timeout → transform → cache.
  • مجموعه ای از پلاگین ها در مسیر ؛ سنگین - فقط در صورت لزوم.
  • JWKS/PDP با TTL کوتاه و کش ؛ زمان بندی و استراتژی های عقب نشینی
  • نرخ/سهمیه/همزمانی - کلید طراحی شده اند، sharding ذخیره سازی.
  • قرمز/استفاده از مجموعه متریک، ردیابی OTel، نمونه برداری دم/تطبیقی.
  • Canary + حالت سایه، بازگشت خودکار توسط SLO.
  • اسرار در KMS/طاق ؛ configs - نسخه، با مهاجرت.
  • محدودیت های بدن/هدر ؛ حفاظت بیش از حد/آهسته POST.
  • مستندات مشتری: کدهای 401/403/409/422/429/5xx، 'Retry-After'، هدر های مثال.

13) TL ؛ دکتر متخصص

ساخت یک «خرابی اولیه → احراز هویت/مجوز → محدودیت/تداوم → انتقال اعتبار/کش → تله متری» زنجیره ای. فقط پلاگین های لازم در هر مسیر، راه حل های خارجی کش (JWKS/PDP) را فعال کنید، زمان بندی ها را تنظیم کنید و سیاست ها را دوباره امتحان کنید، کاردینالیتی معیارها را کنترل کنید. انتشار از طریق سایه/قناری، حفظ اسرار در KMS/خرک و اندازه گیری تاثیر هر پلاگین در p95/p99.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.