GH GambleHub

API 보안 및 토큰

간략한 요약

API 보안은 요청이 예상 컨텍스트에서 예상 엔티티를 예상 리소스로 실행하도록하는 인증, 인증, 암호화 보호, 남용 방지 및 관찰 가능성 메커니즘 모음입니다. 주요 아티팩트는 통화 권한을 증명하는 토큰 (또는 요청 서명) 입니다. 좋은 아키텍처는 수명이 짧은 토큰, 명확한 스코프, 최소한의 권한, 재생 보호, 속도 제한 및 운영 절차 (회전, 감사, 사건) 에 의존합니다.

API 인증 모델-언제 무엇을 선택해야하는지

API 키 (정적 비밀)

B2B 통합 및 저 위험 시나리오에 간단합니다. 컨텍스트를 전달하지 않으면 서비스 측에 스토리지가 필요합니

IP/ASN 허용 목록, 고정 할당량, 짧은 TTL 및 회전에서만 사용하십시오.

OAuth 2. 1/OIDC

사용자 및 파트너 통합 표준: 액세스 토큰 (단기) + 새로 고침 토큰 (회전) + 스코프.
공공 고객-PKCE; 기밀 클라이언트-클라이언트 비밀/mTLS.

클라이언트 자격 증명 (m2m)

Mashina → mashina: 엄격하게 정의 된 스코프 및 잠재 고객의 서비스에 대한 액세스 토큰은 종종 새로 고침없이 (다시 얻으십시오).

mTLS (뮤추얼 TLS)

신원을 채널에 묶습니다. 고위험 또는 결제 통합에 이상적입니다 (PoP over TLS).
OAuth (mSL 클라이언트 전용 토큰) 와 결합 할 수 있습니다.

요청 서명 (HMAC/EdUSA)

전송 독립적 인 PoP가 필요한 경우: 서명 헤더, 타임 스탬프 및 nonce. 웹 후크 및 오프라인 검증을위한 편리함.

토큰 형식 및 유형

JWT (JWS, 서명)

자급 자족, 현지 점검; 필수 'iss', 'sub', 'aud', 'exp', 'iat', 'jti', 'scope'.
위험-더 어려운 리콜: 사고시 짧은 TTL (5-15 분) + 리콜 된 'jti' 목록을 사용하십시오.

JWE (암호화 된 JWT)

페이로드가 민감한 경우 필요합니다 (PII). 비용-더 높은 복잡성과 오버 헤드.

참조 토큰

Opaque 식별자, 승인 서버의 내성을 통해 확인-더 쉬운 리콜/중앙 집중화.

PoP/DPoP

클라이언트 키 또는 TLS 세션에 토큰을 바인딩하면 도난당한 토큰의 가치가 떨어집니다.

토큰 내용: 최소 충분

권장 스탬프 (JWT):
  • 'iss' (발행자), 'sub' (주제), 'aud' (대상 시스템/리소스), 'exp' (용어), 'iat', 'nbf' (선택 사항), 'jti'.
  • 'scope '/' rights' (최소 요구 사항), 'tenit' (멀티 테넌트 용), '장치 _ 호환 '/' amr' (인증 방법), 'ip '/' asn' (정책에 적용 가능한 경우).
규칙:
  • 접근을위한 짧은 TTL (5-15 분), 새로 고침-12-48 h (회전 회전).
  • 청중 ('aud') 은 엄격하게 구체적인 리소스이며, 그렇지 않으면 토큰을 "재사용 가능" 합니다.
  • 스코프-행동과 대상 (예: '지불: 철회. 읽기 ').
  • 크기 - 헤더 및 프록시의 경우 그렇지 않으면 게이트웨이에 문제가있을 수 있습니다

승인 및 정책

RBAC + ABAC: 역할 + 컨텍스트 (조직, 지리, 위험, 장치 상태).
응용 프로그램 전에 API 게이트웨이/프록시 (Envoy/OPA) 에 대한 PEP/PDP 토큰 검증 및 결정.
선언 규칙: 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) 및 재생 방지

필요한 경우: 웹 후크, 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))
규칙:
  • 시간 정렬 오류가 발생하면 요청을 거부합니다.
  • Nonce는 5-15 분 동안 저장하고 재생 (재생 캐시) 을 허용하지 않습니다.
  • 표준화 된 쿼리보기 (메소드, 경로, 쿼리, 바디 해시) 에 서명하십시오.

정체성 및 거래 보호

쓰기/지불/생성 작업을위한 Idempotency-Key: 동일한 키 → 동일한 효과.
주요 수명은 비즈니스 시간 초과 시간 (일반적으로 24-72 시간) 입니다.
서버 측 논리-쿼리 매개 변수를이 키에 대해 이전에 커밋 된 매개 변수와 비교하십시오.

브라우저 및 모바일 클라이언트

PKCE는 필수 (공공 고객) 입니다.
브라우저에서 토큰 새로 고침-피하십시오; 필요한 경우-ROTATION + 재생 응답 (재생 감지).
스토리지: 세션 스토리지> 로컬 스토리지 더 나은-프론트 엔드 (BFF) 의 백엔드가 토큰을 담당합니다.
SameSite, Secure, HttpOnly CORS-명시 적 허용 목록, 헤더 및 방법; 비행 전 캐싱은 안전합니다.

m2m 및 고위험 통합

스코프 및 'aud' 가있는 mSL + OAuth2 클라이언트 자격 증명.
게이트웨이의 IP/ASN 허용 목록.
중요한 작업을 위해 TLS를 통한 PoP/DPoP 또는 HMAC 서명.
조직/클라이언트/키 당 쿼타 및 요율 제한.

회전, 리콜 및 사건 대응

비밀 및 서명 키 회전 (JWKS): 사고시 예약 + 시행

듀얼 키 롤아웃: 새로운 키 쌍을 미리 게시하고 (kid2) 토큰에 서명하고 TTL이 소진 될 때까지 이전 키 (kid1) 를 검증하여 유지하십시오.
새로 고침 회전: 모든 새로 고침 교환 → 새 토큰은 즉시 유효하지 않습니다. 반복-타협 신호.
취소: JWT의 경우 - 짧은 시간 동안 리콜 된 'jti' 목록; 참조 토큰의 경우-AS에서 즉시 차단합니다.
브레이크 글래스 스크립트: 최소한의 권한과 하드 TTL을 가진 임시 정적 크레딧으로 로그에 기록하십시오.

속도 제한, 봇 보호 및 무차별 대입 방지

3 계층 제한: 키 당/IP 당/조직 당.
버스트 + 지속: 토큰 탱크/슬라이딩 창.
복잡한 점검: 장치 지문, 행동 신호, 지리/ASN 이상, UI 전용 CAPTCHA.

서명/NMAC 재협상 및 인증 시도시 잠금/둔화

로깅, 메트릭 및 SLO

최소 로그 세트: '요청 _ id', '클라이언트 _ id', '하위', 'aud', 'scope', 'decision', 'reason', 'jti', 'ip', 'asy', 'latency', 'latency', '쿼터 _ state'.

메트릭:
  • 토큰 검증 성공 (%), p95 검증 시간.
  • 재생 편차의 빈도, Idempotency-Key의 복제본.
  • PoP/DPoP/mTLS의 요청 비율.
  • 'aud/scope' 오류, 만료 된 'exp', 시간 이동 (NTP).
SLO (예):
  • Auth/AS 확장 99 가용성. 95 %/월; p95 introspection
  • TTL <60 s의 제로 토큰 (가드 메트릭).
  • 0 미만. 하루에 'aud/scope' 오류의 1% (통합 품질).

설정 예

특사: 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: 백엔드Name

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;

서명 헤더 (웹 후크) 의 예


X-Signature: t=1730803210,n=ac12...,s=base64(HMAC_SHA256(secret, "POST\n/webhook\nsha256(body)\n1730803210\nac12..."))

't' 가 300c보다 오래되거나 'n' 이 이미 충족되었거나 '이길 수없는 경우 서버는 거부합니다.

데이터 보호 및 개인 정보

특징 (특히 PII) 과 수명을 최소화하십시오.
타사 통합을위한 민감한 스탬프 (JWE) 를 암호화합니다.
로그의 마스크/DLP: PAN/PII, 토큰으로 바디를 기록하지 마십시오-비밀 자체가 아닌 '키드 '/플래그 만 있습니다.

공통 오류

오래 지속되는 액세스 토큰 및 "영원한" 새로 고침.
'aud '/' scope' → 토큰의 부재는 다목적입니다.
'타임 스탬프 '/' nonce' 가없는 웹 후크의 서명.
게이트웨이 (PEP) 가 아닌 응용 프로그램에서만 JWT를 확인합니다.
회전 및 듀얼 키 롤아웃이 없습니다.
"CORS" 는 헤더 제어없이 안전하지 않은 방법을 허용했습니다.
BFF없이 'localStorage' 에 토큰을 저장합니다.

구현 로드맵

1. API 인벤토리 및 분류 (공개/파트너/내부, 감도).
2. 권한 모델 선택: 사용자 정의를위한 OAuth2/OIDC, m2m를위한 클라이언트 자격 증명/HMAC.
3. 토큰: 중요한 작업을위한 짧은 TTL, 엄격한 'aud', 스코프, DPoP/PoP.
4. 게이트웨이의 PEP: 앱에 대한 JWT 검증, 서명 및 요율 제한.
5. 재생 방지 및 demempotency: 타임 스탬프/nonce/Idempotency-Key.
6. 회전 및 JWKS: 듀얼 키, 자동화 및 경고.
7. 관찰 가능성: 메트릭/SLO, 액세스 로그, UEBA 신호.
8. 운동: 서명 키, 새로 고침 누출, 할당량 과부하.

iGaming/fintech의 특성

지불/지불: mSL + PoP/HMAC 만 해당, 엄격한 범위 ('철회. '), demempotency가 필요합니다.
파트너 (PSP/컨텐츠 제공 업체): 파트너 별 키/인증서, IP/ASN 허용 목록, 개별 할당량 및 대시 보드.
GDPR/PCI DSS: 스탬프 최소화, 타사 토큰으로 PII 금지, 민감한 리소스에 대한 액세스 기록, 정기적 인 액세스 검토.
남용 방지: 행동 제한, 지리 제어, API 수준의 보너스 남용에 대한 보호.

FAQ

JWT 또는 참조 토큰?
JWT - 성능 및 자율성; 참조-중앙 집중식 피드백 및 사고 대응의 단순성. 종종 하이브리드: 외부-JWT, 내부-참조.

JWE가 필요합니까?
페이로드에 PII/비밀이 포함 된 경우에만 가능합니다. 그렇지 않으면-최소한의 특징을 가진 JWS.

API 키에서 살 수 있습니까?
예, 짧은 TTL, 엄격한 할당량, IP 허용 목록 및 요청 서명 만 있으면됩니다. 사용자에게는 OAuth/OIDC가 선호됩니다.

DPoP/PoP 필수?
항상 그런 것은 아닙 그러나 고위험 운영 (지불, 결론) 의 경우 매우 바람직합니다.

합계

신뢰할 수있는 API 보안은 수명이 짧은 토큰, 정확한 스코프 및 잠재 고객, 보안 채널 (SL/mSL), 요청 서명 및 엄격한 재생 방지 보호 기능을 기반으로하며 한계 및 관찰 성으로 강화됩니다. 게이트웨이에 자동화 된 로테이션, 듀얼 키 롤아웃 및 정치적 통제를 추가하면 API가 누출, 재생 및 남용에 견딜 수 있으며 고성능 및 관리 가능성을 유지합니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.