APIセキュリティの重要性
APIは現代のアプリケーションの「裏口」です。適切なセキュリティ対策なしに公開されたAPIは、データ漏洩・不正アクセス・サービス妨害の主要な攻撃ベクトルになります。
認証(Authentication)の実装
JWT(JSON Web Token):ステートレスな認証に最もよく使われます。ユーザーがログインするとサーバーがJWTを発行し、以降のリクエストでそのトークンを添付します。
import jwt
from datetime import datetime, timedelta
def create_token(user_id: str) -> str:
payload = {
"sub": user_id,
"exp": datetime.utcnow() + timedelta(hours=1),
"iat": datetime.utcnow()
}
return jwt.encode(payload, SECRET_KEY, algorithm="HS256")
認可(Authorization)の設計
| モデル | 説明 | 適用場面 |
|---|---|---|
| RBAC | ロール(管理者/ユーザー)に基づく | 一般的なWebアプリ |
| ABAC | 属性(部署/年齢/場所)に基づく | 複雑な権限設計 |
| ACL | リソースごとにアクセスリストを管理 | ファイルシステム系 |
レートリミットの実装
APIの乱用・DDoS対策として必須です。
from functools import wraps
import time
# 簡易レートリミット(Redis実装が本番向き)
request_counts = {}
def rate_limit(max_requests=100, window=60):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
ip = request.remote_addr
now = time.time()
if ip not in request_counts:
request_counts[ip] = []
request_counts[ip] = [t for t in request_counts[ip] if now - t < window]
if len(request_counts[ip]) >= max_requests:
return {"error": "Rate limit exceeded"}, 429
request_counts[ip].append(now)
return f(*args, **kwargs)
return wrapper
return decorator
その他の重要な対策
- HTTPS強制:すべてのAPIトラフィックを暗号化
- 入力バリデーション:SQLインジェクション・XSSを防ぐ
- APIキーのローテーション:定期的な鍵更新の仕組みを整備
- CORS設定:許可するオリジンを明示的に制限





