Claude Code Plugins

Community-maintained marketplace

Feedback

.claude/skills/authentication-flows/SKILL.md

@mattnigh/skills_collection
1
0

|

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name .claude/skills/authentication-flows/SKILL.md
description ## 概要 📚 リソース参照: このスキルには以下のリソースが含まれています。 必要に応じて該当するリソースを参照してください: - `.claude/skills/authentication-flows/resources/api-key.md`: API Key Authentication - `.claude/skills/authentication-flows/resources/jwt.md`: JSON Web Token (JWT) - `.claude/skills/authentication-flows/resources/mtls.md`: Mutual TLS (mTLS) - `.claude/skills/authentication-flows/resources/oauth2.md`: OAuth 2.0フロー種別(Authorization Code・PKCE・Client Credentials・Device Code)の実装ガイドとTypeScriptサンプルコード - `.claude/skills/authentication-flows/templates/jwt-service-template.ts`: JWT Service Template - `.claude/skills/authentication-flows/templates/oauth2-client-template.ts`: OAuth 2.0 Client Template - `.claude/skills/authentication-flows/scripts/validate-auth-config.mjs`: Authentication Configuration Validator 専門分野: - (要追加) 使用タイミング: - (要追加) Use proactively when (要追加).
version 1.0.0

Authentication Flows スキル

概要

外部API認証の実装パターンを提供するスキル。 OAuth 2.0、JWT、API Key、相互TLSなど、主要な認証方式の 実装手法とセキュリティベストプラクティスを解説します。

対象エージェント

  • .claude/agents/gateway-dev.md
  • @backend-architect
  • @security-engineer
  • .claude/agents/auth-specialist.md

含まれるリソース

1. OAuth 2.0 (resources/oauth2.md)

  • Authorization Code Flow
  • Client Credentials Flow
  • PKCE拡張
  • トークンリフレッシュ戦略

2. JWT (resources/jwt.md)

  • JWT構造と検証
  • 署名アルゴリズム選択
  • クレーム設計
  • トークンローテーション

3. API Key (resources/api-key.md)

  • API Key管理
  • 安全な保存方法
  • ローテーション戦略
  • 使用量追跡

4. 相互TLS (resources/mtls.md)

  • 証明書ベース認証
  • 証明書管理
  • 信頼チェーン構築
  • 証明書ローテーション

ワークフロー

1. 認証要件分析
   ├── サービス間 vs ユーザー認証の判断
   ├── セキュリティ要件の特定
   └── 既存認証基盤の確認

2. 認証方式選択
   ├── OAuth 2.0: ユーザー委譲、サードパーティ連携
   ├── JWT: ステートレス認証、マイクロサービス
   ├── API Key: シンプルなサービス間通信
   └── mTLS: 高セキュリティ要件

3. 実装
   ├── 認証フローの実装
   ├── トークン管理の実装
   └── エラーハンドリング

4. セキュリティ検証
   ├── 脆弱性テスト
   ├── トークンリーク検出
   └── 有効期限検証

認証方式選択ガイド

シナリオ 推奨方式 理由
ユーザー代理でAPI呼び出し OAuth 2.0 Auth Code ユーザー同意フロー対応
サービス間通信 OAuth 2.0 Client Credentials サービスアカウント認証
SPAからのAPI呼び出し OAuth 2.0 + PKCE トークン漏洩対策
社内マイクロサービス JWT ステートレス、検証容易
シンプルなAPI連携 API Key 実装簡易、低オーバーヘッド
金融・医療等高セキュリティ mTLS 双方向認証、強力な暗号化

ベストプラクティス

トークン管理

// トークンキャッシュとリフレッシュ
class TokenManager {
  private accessToken: string | null = null;
  private refreshToken: string | null = null;
  private expiresAt: number = 0;

  async getToken(): Promise<string> {
    // 有効期限の5分前にリフレッシュ
    if (this.accessToken && Date.now() < this.expiresAt - 5 * 60 * 1000) {
      return this.accessToken;
    }

    if (this.refreshToken) {
      return this.refreshAccessToken();
    }

    return this.authenticate();
  }

  private async refreshAccessToken(): Promise<string> {
    // リフレッシュトークンで新しいアクセストークン取得
  }

  private async authenticate(): Promise<string> {
    // 初回認証
  }
}

シークレット管理

// 環境変数からシークレット取得
function getSecret(name: string): string {
  const value = process.env[name];
  if (!value) {
    throw new Error(`Missing required secret: ${name}`);
  }
  return value;
}

// AWS Secrets Manager例
async function getSecretFromSecretsManager(secretId: string): Promise<string> {
  const client = new SecretsManagerClient({});
  const response = await client.send(
    new GetSecretValueCommand({ SecretId: secretId }),
  );
  return response.SecretString!;
}

エラーハンドリング

// 認証エラーの分類
function handleAuthError(error: unknown): never {
  if (error instanceof AuthError) {
    switch (error.code) {
      case "invalid_token":
        // トークン無効 → 再認証
        throw new UnauthorizedError("Token is invalid or expired");

      case "insufficient_scope":
        // スコープ不足 → 403
        throw new ForbiddenError("Insufficient permissions");

      case "invalid_client":
        // クライアント設定エラー → 設定確認
        throw new ConfigurationError("Invalid client credentials");

      default:
        throw new AuthenticationError(error.message);
    }
  }
  throw error;
}

セキュリティチェックリスト

設計時

  • 適切な認証方式を選択したか?
  • トークン有効期限を設定したか?
  • シークレットの保存場所を決定したか?

実装時

  • トークンをログに出力していないか?
  • HTTPSを使用しているか?
  • エラーメッセージに機密情報を含めていないか?

運用時

  • シークレットローテーションが設定されているか?
  • 認証失敗のモニタリングがあるか?
  • トークン漏洩検出の仕組みがあるか?

アンチパターン

❌ トークンのログ出力

// NG: トークンをログに出力
console.log("Token:", accessToken);
logger.info({ headers: request.headers }); // Authorizationヘッダー含む

// ✅ マスキング
console.log("Token:", maskToken(accessToken));
logger.info({ headers: maskHeaders(request.headers) });

❌ ハードコードされたシークレット

// NG: コードにシークレット埋め込み
const apiKey = "sk-12345-secret-key";

// ✅ 環境変数使用
const apiKey = process.env.API_KEY;

❌ 無期限トークン

// NG: 有効期限なしのJWT
const token = jwt.sign({ userId: 123 }, secret);

// ✅ 適切な有効期限
const token = jwt.sign({ userId: 123 }, secret, { expiresIn: "1h" });

参考資料

  • RFC 6749: The OAuth 2.0 Authorization Framework
  • RFC 7519: JSON Web Token (JWT)
  • RFC 7636: Proof Key for Code Exchange (PKCE)
  • OWASP: Authentication Cheat Sheet

関連スキル

  • .claude/skills/api-client-patterns/SKILL.md: APIクライアント実装パターン
  • .claude/skills/http-best-practices/SKILL.md: HTTPベストプラクティス
  • .claude/skills/rate-limiting/SKILL.md: レート制限実装