api-authentication について
API 開発者向けの認証実装スキルです。JWT、OAuth 2.0、API キー、セッションを扱い、セキュリティ要件やよくある誤りも説明します。
主な機能
- 01JWT 認証のガイダンス
- 02OAuth 2.0 連携の解説
- 03API キーとセッション方式
- 04Node.js と Flask の例
- 05認証のセキュリティ要件
活用シーン
- 01API の認証方式の選定
- 02JWT トークン認証の実装
- 03サードパーティー OAuth サービスへの接続
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill api-authenticationインストール後、Claude Code で/api-authenticationを入力して読み込まれたか確認します。
同梱ファイルreferences/python-flask.md
詳細
API 認証
最新の標準とベストプラクティスを用いて、API の安全な認証方式を実装します。
認証方式
| 方式 | 用途 | セキュリティレベル |
|---|---|---|
| JWT | ステートレス認証、SPA | 高 |
| OAuth 2.0 | サードパーティとの連携 | 高 |
| API Keys | サービス間通信 | 中 |
| Session | 従来型の Web アプリ | 高 |
JWT の実装(Node.js)
const jwt = require('jsonwebtoken');
const generateTokens = (user) => ({
accessToken: jwt.sign(
{ userId: user.id, role: user.role },
process.env.JWT_SECRET,
{ expiresIn: '15m' }
),
refreshToken: jwt.sign(
{ userId: user.id, type: 'refresh' },
process.env.REFRESH_SECRET,
{ expiresIn: '7d' }
)
});
const authMiddleware = (req, res, next) => {
const authHeader = req.headers.authorization;
// Validate authorization header format
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Malformed authorization header' });
}
const parts = authHeader.split(' ');
if (parts.length !== 2) {
return res.status(401).json({ error: 'Malformed authorization header' });
}
const token = parts[1];
if (!token) {
return res.status(401).json({ error: 'No token provided' });
}
try {
req.user = jwt.verify(token, process.env.JWT_SECRET);
next();
} catch (err) {
res.status(401).json({ error: 'Invalid token' });
}
};
セキュリティ要件
- 必ず HTTPS を使用します
- トークンは HttpOnly Cookie に保存します(localStorage は使用しません)
- パスワードは bcrypt でハッシュ化します(コスト係数は 12 以上)
- 認証エンドポイントにレート制限を実装します
- シークレットは定期的にローテーションします
- トークンを URL で送信しないでください
セキュリティヘッダー
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
next();
});
追加の実装
以下を参照してください。references/python-flask.md:
- ロールベースのアクセス制御デコレーターを使った Flask JWT
- Authlib を使った OAuth 2.0 Google 連携
- セキュアなハッシュ化を使った API キー認証
避けるべきよくある間違い
- 平文のパスワードを保存する
- 弱い JWT シークレットを使用する
- トークンの有効期限を無視する
- 本番環境で HTTPS を無効にする
- 機密性の高いトークンをログに記録する
コメント
Markdown 対応