mcpField
S
securing-authentication

securing-authentication

github.com/ancolemanセキュリティ525103 回インストール46 週間前に更新
リポジトリ

securing-authentication について

Python、Rust、Go、TypeScriptで認証、認可、API保護を実装する開発者向けのセキュリティスキルです。OAuth 2.1、JWT、パスキー、権限モデルを扱い、実装資料とサンプルを提供します。

主な機能

  1. 01OAuth 2.1とJWTの指針
  2. 02パスキーとWebAuthnのパターン
  3. 03RBAC、ABAC、ReBACモデル
  4. 04パスワードハッシュ化とトークン保管
  5. 05APIセキュリティとレート制限

活用シーン

  1. 01アプリへのOAuthログイン追加
  2. 02JWT検証とローテーションの実装
  3. 03パスワードレスのパスキー認証追加
  4. 04アプリのリソースに適した権限モデルの選定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ancoleman/ai-design-components --skill securing-authentication

インストール後、Claude Code で/securing-authenticationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

outputs.yaml
examples/authjs-nextjs/
README.md
references/
api-security.md
authorization-patterns.md
jwt-best-practices.md
managed-auth-comparison.md
oauth21-guide.md
passkeys-webauthn.md
password-hashing.md
self-hosted-auth.md
scripts/
generate_jwt_keys.py
validate_oauth_config.py

詳細

認証とセキュリティ

Python、Rust、Go、TypeScript 全体で、最新の認証、認可、API セキュリティを実装します。

このスキルを使用する場面

次のような場合に、このスキルを使用します。

  • ユーザー認証システム(ログイン、サインアップ、SSO)の構築
  • 認可(ロール、権限、アクセス制御)の実装
  • API のセキュリティ保護(JWT 検証、レート制限)
  • パスワードレス認証(Passkeys/WebAuthn)の追加
  • パスワードベースの認証から最新の認証への移行
  • エンタープライズ SSO(SAML、OIDC)の統合
  • きめ細かな権限(RBAC、ABAC、ReBAC)の実装

OAuth 2.1 の必須要件(2025 年標準)

┌─────────────────────────────────────────────────────────────┐
│           OAuth 2.1 MANDATORY REQUIREMENTS                  │
│                   (RFC 9798 - 2025)                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ✅ REQUIRED (Breaking Changes from OAuth 2.0)             │
│  ├─ PKCE (Proof Key for Code Exchange) MANDATORY           │
│  │   └─ S256 method (SHA-256), minimum entropy 43 chars   │
│  ├─ Exact redirect URI matching                            │
│  │   └─ No wildcard matching, no substring matching       │
│  ├─ Authorization code flow ONLY for public clients       │
│  │   └─ All other flows require confidential client       │
│  └─ TLS 1.2+ required for all endpoints                   │
│                                                             │
│  ❌ REMOVED (No Longer Supported)                          │
│  ├─ Implicit grant (security vulnerabilities)             │
│  ├─ Resource Owner Password Credentials grant              │
│  │   └─ Use OAuth 2.0 Device Flow (RFC 8628) instead      │
│  └─ Bearer token in query parameters                       │
│      └─ Must use Authorization header or POST body        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

重要: PKCE は現在、パブリッククライアントだけでなく、すべての OAuth フローで必須です。

JWT のベストプラクティス

署名アルゴリズム(優先順位順)
  1. EdDSA と Ed25519(推奨)

    • 最速のパフォーマンス
    • 最小の署名サイズ
    • 最新の暗号技術
  2. ES256(P-256 を使用した ECDSA)

    • 良好なパフォーマンス
    • 業界標準
    • 幅広い互換性
  3. RS256(RSA)

    • レガシーとの互換性
    • 大きな署名
    • 低速なパフォーマンス

alg: none やアルゴリズム切り替え攻撃は絶対に許可しないでください。

トークンの有効期間(具体的な値)
  • アクセストークン: 5〜15 分
  • リフレッシュトークン: ローテーション付きで 1〜7 日
  • ID トークン: アクセストークンと同じ(5〜15 分)

リフレッシュトークンのローテーション: 更新のたびに新しいアクセストークンとリフレッシュトークンが発行され、古いリフレッシュトークンは無効になります。

トークンの保存
  • アクセストークン: メモリ内のみ(localStorage には絶対に保存しない)
  • リフレッシュトークン: HTTP 専用 Cookie + SameSite=Strict
  • CSRF トークン: HTTP 専用ではない別の Cookie
  • トークンをログに記録しない: アプリケーションログではマスキングする
JWT クレーム(必須)
{
  "iss": "https://auth.example.com",
  "sub": "user-id-123",
  "aud": "api.example.com",
  "exp": 1234567890,
  "iat": 1234567890,
  "jti": "unique-token-id",
  "scope": "read:profile write:data"
}

Argon2id によるパスワードハッシュ化

OWASP 2025 パラメーター
Algorithm: Argon2id
Memory cost (m): 64 MB (65536 KiB)
Time cost (t): 3 iterations
Parallelism (p): 4 threads
Salt length: 16 bytes (128 bits)
Target hash time: 150-250ms
実装

具体的な実装については、references/password-hashing.md を参照してください。

重要なポイント:

  • Argon2id は、データに依存しないタイミングとメモリハード性を組み合わせたハイブリッド方式です
  • お使いのハードウェアで 150〜250ms になるよう、メモリコストを調整してください
  • 検証にはタイミングセーフな比較を使用してください
  • bcrypt からは段階的に移行してください(旧方式で検証し、新方式で再ハッシュします)

Passkeys / WebAuthn

Passkeys は、FIDO2/WebAuthn を使用したフィッシング耐性のあるパスワードレス認証を提供します。

Passkeys を使用する場面
  • セキュリティを優先するユーザー向けアプリケーション
  • パスワード関連のサポート負担の軽減
  • モバイルファーストのアプリケーション(生体認証)
  • SMS を使わずに MFA が必要なアプリケーション
デバイス間での Passkey 同期
  • iCloud Keychain: Apple エコシステム(iOS 16+、macOS 13+)
  • Google Password Manager: Android、Chrome
  • 1Password、Bitwarden: サードパーティのパスワードマネージャー

実装ガイドについては、references/passkeys-webauthn.md を参照してください。

認可モデル

┌─────────────────────────────────────────────────────────────┐
│                Authorization Model Selection                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Simple Roles (<20 roles)                                  │
│  └─ RBAC with Casbin (embedded, any language)              │
│      Example: Admin, User, Guest                           │
│                                                             │
│  Complex Attribute Rules                                    │
│  └─ ABAC with OPA or Cerbos                                │
│      Example: "Allow if user.clearance >= doc.level        │
│                AND user.dept == doc.dept"                   │
│                                                             │
│  Relationship-Based (Multi-Tenant, Collaborative)          │
│  └─ ReBAC with SpiceDB (Zanzibar model)                    │
│      Example: "Can edit if member of doc's workspace       │
│                AND workspace.plan includes feature"         │
│      Use cases: Notion-like, GitHub-like permissions       │
│                                                             │
│  Kubernetes / Infrastructure Policies                       │
│  └─ OPA (Gatekeeper for admission control)                 │
│      Example: Enforce pod security policies                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

詳しい比較については、references/authorization-patterns.md を参照してください。

言語別のライブラリ選定

TypeScript
ユースケースライブラリContext7 ID信頼度備考
認証フレームワークAuth.js v5/websites/authjs_dev87.4マルチフレームワーク(Next、Svelte、Solid)
JWTjose 5.x--EdDSA、ES256、RS256 をサポート
Passkeys@simplewebauthn/server 11.x--FIDO2 サーバー
検証Zod 3.x/colinhacks/zod90.4スキーマ検証
ポリシーエンジンCasbin.js 1.x--組み込み RBAC/ABAC
Python
ユースケースライブラリ備考
認証フレームワークAuthlib 1.3+OAuth/OIDC クライアント+サーバー
JWTjoserfc 1.x最新で、保守が継続されています
Passkeyspy_webauthn 2.xWebAuthn サーバー
パスワードハッシュ化argon2-cffi 24.xOWASP パラメーター
検証Pydantic 2.xFastAPI との統合
ポリシーエンジンPyCasbin 1.x組み込み RBAC/ABAC
Rust
ユースケースライブラリ備考
JWTjsonwebtoken 10.xEdDSA、ES256、RS256
OAuth クライアントoauth2 5.xOAuth 2.1 フロー
パスキーwebauthn-rs 0.5.xWebAuthn + アテステーション
パスワードハッシュ化argon2 0.5.xネイティブ Argon2id
ポリシーエンジンCasbin-RS 2.x組み込み RBAC/ABAC
Go
ユースケースライブラリ備考
JWTgolang-jwt v5コミュニティによるメンテナンス
OAuth クライアントgo-oidc v3OIDC クライアントのみ
パスキーgo-webauthn 0.11.xDuo がメンテナンス
パスワードハッシュ化golang.org/x/crypto/argon2標準ライブラリ
ポリシーエンジンCasbin v2オリジナル実装

マネージド認証サービス

サービス最適な用途主な機能
Clerk迅速な開発、スタートアップ事前構築済み UI、Next.js SDK
Auth0エンタープライズ、既存企業25 以上のソーシャルプロバイダー、SSO
WorkOS AuthKitB2B SaaS、エンタープライズ SSOSAML/SCIM、管理者ポータル
Supabase AuthPostgres ユーザーPostgres 上に構築、RLS

詳細な比較については、references/managed-auth-comparison.md を参照してください。

セルフホスト型ソリューション

ソリューション言語用途
KeycloakJavaエンタープライズ、オンプレミス
OryGoクラウドネイティブ、マイクロサービス
AuthentikPythonモダン、開発者に優しい

セットアップガイドについては、references/self-hosted-auth.md を参照してください。

API セキュリティのベストプラクティス

レート制限
// Tiered rate limiting (per IP + per user)
const rateLimits = {
  anonymous: '10 requests/minute',
  authenticated: '100 requests/minute',
  premium: '1000 requests/minute',
}

Redis を使い、固定ウィンドウではなくスライディングウィンドウアルゴリズムを使用してください。

CORS の設定
// Restrictive CORS (production)
const corsOptions = {
  origin: ['https://app.example.com'],
  credentials: true,
  maxAge: 86400, // 24 hours
  allowedHeaders: ['Content-Type', 'Authorization'],
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
}

// NEVER use origin: '*' with credentials: true
セキュリティヘッダー
const securityHeaders = {
  'Strict-Transport-Security': 'max-age=63072000; includeSubDomains; preload',
  'X-Frame-Options': 'DENY',
  'X-Content-Type-Options': 'nosniff',
  'Referrer-Policy': 'strict-origin-when-cross-origin',
  'Permissions-Policy': 'geolocation=(), microphone=(), camera=()',
  'Content-Security-Policy': "default-src 'self'; script-src 'self'",
}

API セキュリティガイドの全文については、references/api-security.md を参照してください。

フロントエンド統合パターン

保護されたルート(Next.js)
// middleware.ts
import { withAuth } from 'next-auth/middleware'

export default withAuth({
  callbacks: {
    authorized: ({ token, req }) => {
      if (req.nextUrl.pathname.startsWith('/dashboard')) {
        return !!token
      }
      if (req.nextUrl.pathname.startsWith('/admin')) {
        return token?.role === 'admin'
      }
      return true
    },
  },
})

export const config = {
  matcher: ['/dashboard/:path*', '/admin/:path*'],
}
ロールベースの UI レンダリング
import { useSession } from 'next-auth/react'

export function AdminPanel() {
  const { data: session } = useSession()

  if (session?.user?.role !== 'admin') {
    return null
  }

  return <div>Admin Controls</div>
}

一般的なワークフロー

1. OAuth 2.1 の統合
  1. PKCE チャレンジを生成する
  2. 認可エンドポイントにリダイレクトする
  3. 認可コードを使ってコールバックを処理する
  4. コードをトークンと交換する(code_verifier を使用)
  5. トークンを安全に保存する
  6. リフレッシュトークンのローテーションを実装する

完全な実装については、references/oauth21-guide.md を参照してください。

2. JWT の実装
  1. scripts/generate_jwt_keys.py を使って署名キーを生成する
  2. トークンの有効期間を設定する(アクセストークンは 5~15 分、リフレッシュトークンは 1~7 日)
  3. トークン検証ミドルウェアを実装する
  4. リフレッシュトークンのローテーションを設定する
  5. トークンの保存方法を設定する(アクセストークンはメモリ、リフレッシュトークンは HTTP 専用 Cookie)

詳細なパターンについては、references/jwt-best-practices.md を参照してください。

3. パスキーのセットアップ
  1. 登録/設定時に認証情報を登録する
  2. 登録用のチャレンジを生成する
  3. アテステーションを検証する
  4. 認証情報 ID と公開鍵を保存する
  5. アサーションを使った認証フローを実装する

実行可能な実装例については、examples/passkeys-demo/ を参照してください。

4. 認可エンジンのセットアップ
  1. エンジンを選択する(シンプルな RBAC には Casbin、ReBAC には SpiceDB)
  2. スキーマ/ポリシーを定義する
  3. チェック関数を実装する
  4. ルートハンドラーと統合する
  5. 監査ログを追加する

詳細な比較については、references/authorization-patterns.md を参照してください。

他のスキルとの統合

フォームスキル
  • 検証機能付きのログイン/登録フォーム
  • 認証エラー時のエラー状態
  • パスワード強度インジケーター
  • メールアドレスの検証
API パターンスキル
  • JWT ミドルウェアの統合
  • エラーレスポンス形式(401、403)
  • OpenAPI セキュリティスキーマ
  • CORS の設定
ダッシュボードスキル
  • ロールベースのウィジェット表示
  • ユーザープロフィールの表示
  • 権限に基づくデータのフィルタリング
  • 監査証跡の可視化
オブザーバビリティスキル
  • 認証イベントのログ記録(ログイン、ログアウト、権限拒否)
  • ログイン失敗の追跡
  • トークン更新の監視
  • セキュリティインシデントのアラート通知

スクリプト

JWT キーの生成
python scripts/generate_jwt_keys.py --algorithm EdDSA

JWT 署名用の EdDSA または ES256 キーペアを生成します。

OAuth 2.1 設定の検証
python scripts/validate_oauth_config.py --config oauth.json

OAuth 2.1 への準拠(PKCE の有効化、完全一致するリダイレクト URI など)を検証します。

例

Auth.js + Next.js

OAuth プロバイダー、認証情報、セッション管理を含む完全な実装です。

場所:examples/authjs-nextjs/

Keycloak + FastAPI

OIDC による FastAPI との統合に対応した、セルフホスト可能な Keycloak です。

場所:examples/keycloak-fastapi/

Passkeys デモ

@simplewebauthn を使用した、実行可能なパスキーの実装です。

場所:examples/passkeys-demo/

リファレンスドキュメント

  • references/oauth21-guide.md - OAuth 2.1 の実装ガイド
  • references/jwt-best-practices.md - JWT の生成、検証、保存
  • references/passkeys-webauthn.md - パスキー/WebAuthn の実装
  • references/authorization-patterns.md - RBAC、ABAC、ReBAC の比較
  • references/password-hashing.md - Argon2id のパラメーター、移行

コメント