securing-authentication について
Python、Rust、Go、TypeScriptで認証、認可、API保護を実装する開発者向けのセキュリティスキルです。OAuth 2.1、JWT、パスキー、権限モデルを扱い、実装資料とサンプルを提供します。
主な機能
- 01OAuth 2.1とJWTの指針
- 02パスキーとWebAuthnのパターン
- 03RBAC、ABAC、ReBACモデル
- 04パスワードハッシュ化とトークン保管
- 05APIセキュリティとレート制限
活用シーン
- 01アプリへのOAuthログイン追加
- 02JWT検証とローテーションの実装
- 03パスワードレスのパスキー認証追加
- 04アプリのリソースに適した権限モデルの選定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill securing-authenticationインストール後、Claude Code で/securing-authenticationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
outputs.yamlexamples/authjs-nextjs/README.mdreferences/api-security.mdauthorization-patterns.mdjwt-best-practices.mdmanaged-auth-comparison.mdoauth21-guide.mdpasskeys-webauthn.mdpassword-hashing.mdself-hosted-auth.mdscripts/generate_jwt_keys.pyvalidate_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 のベストプラクティス
署名アルゴリズム(優先順位順)
-
EdDSA と Ed25519(推奨)
- 最速のパフォーマンス
- 最小の署名サイズ
- 最新の暗号技術
-
ES256(P-256 を使用した ECDSA)
- 良好なパフォーマンス
- 業界標準
- 幅広い互換性
-
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_dev | 87.4 | マルチフレームワーク(Next、Svelte、Solid) |
| JWT | jose 5.x | - | - | EdDSA、ES256、RS256 をサポート |
| Passkeys | @simplewebauthn/server 11.x | - | - | FIDO2 サーバー |
| 検証 | Zod 3.x | /colinhacks/zod | 90.4 | スキーマ検証 |
| ポリシーエンジン | Casbin.js 1.x | - | - | 組み込み RBAC/ABAC |
Python
| ユースケース | ライブラリ | 備考 |
|---|---|---|
| 認証フレームワーク | Authlib 1.3+ | OAuth/OIDC クライアント+サーバー |
| JWT | joserfc 1.x | 最新で、保守が継続されています |
| Passkeys | py_webauthn 2.x | WebAuthn サーバー |
| パスワードハッシュ化 | argon2-cffi 24.x | OWASP パラメーター |
| 検証 | Pydantic 2.x | FastAPI との統合 |
| ポリシーエンジン | PyCasbin 1.x | 組み込み RBAC/ABAC |
Rust
| ユースケース | ライブラリ | 備考 |
|---|---|---|
| JWT | jsonwebtoken 10.x | EdDSA、ES256、RS256 |
| OAuth クライアント | oauth2 5.x | OAuth 2.1 フロー |
| パスキー | webauthn-rs 0.5.x | WebAuthn + アテステーション |
| パスワードハッシュ化 | argon2 0.5.x | ネイティブ Argon2id |
| ポリシーエンジン | Casbin-RS 2.x | 組み込み RBAC/ABAC |
Go
| ユースケース | ライブラリ | 備考 |
|---|---|---|
| JWT | golang-jwt v5 | コミュニティによるメンテナンス |
| OAuth クライアント | go-oidc v3 | OIDC クライアントのみ |
| パスキー | go-webauthn 0.11.x | Duo がメンテナンス |
| パスワードハッシュ化 | golang.org/x/crypto/argon2 | 標準ライブラリ |
| ポリシーエンジン | Casbin v2 | オリジナル実装 |
マネージド認証サービス
| サービス | 最適な用途 | 主な機能 |
|---|---|---|
| Clerk | 迅速な開発、スタートアップ | 事前構築済み UI、Next.js SDK |
| Auth0 | エンタープライズ、既存企業 | 25 以上のソーシャルプロバイダー、SSO |
| WorkOS AuthKit | B2B SaaS、エンタープライズ SSO | SAML/SCIM、管理者ポータル |
| Supabase Auth | Postgres ユーザー | Postgres 上に構築、RLS |
詳細な比較については、references/managed-auth-comparison.md を参照してください。
セルフホスト型ソリューション
| ソリューション | 言語 | 用途 |
|---|---|---|
| Keycloak | Java | エンタープライズ、オンプレミス |
| Ory | Go | クラウドネイティブ、マイクロサービス |
| Authentik | Python | モダン、開発者に優しい |
セットアップガイドについては、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 の統合
- PKCE チャレンジを生成する
- 認可エンドポイントにリダイレクトする
- 認可コードを使ってコールバックを処理する
- コードをトークンと交換する(code_verifier を使用)
- トークンを安全に保存する
- リフレッシュトークンのローテーションを実装する
完全な実装については、references/oauth21-guide.md を参照してください。
2. JWT の実装
scripts/generate_jwt_keys.pyを使って署名キーを生成する- トークンの有効期間を設定する(アクセストークンは 5~15 分、リフレッシュトークンは 1~7 日)
- トークン検証ミドルウェアを実装する
- リフレッシュトークンのローテーションを設定する
- トークンの保存方法を設定する(アクセストークンはメモリ、リフレッシュトークンは HTTP 専用 Cookie)
詳細なパターンについては、references/jwt-best-practices.md を参照してください。
3. パスキーのセットアップ
- 登録/設定時に認証情報を登録する
- 登録用のチャレンジを生成する
- アテステーションを検証する
- 認証情報 ID と公開鍵を保存する
- アサーションを使った認証フローを実装する
実行可能な実装例については、examples/passkeys-demo/ を参照してください。
4. 認可エンジンのセットアップ
- エンジンを選択する(シンプルな RBAC には Casbin、ReBAC には SpiceDB)
- スキーマ/ポリシーを定義する
- チェック関数を実装する
- ルートハンドラーと統合する
- 監査ログを追加する
詳細な比較については、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 のパラメーター、移行