| name | authentication-authorization |
| description | ログイン、セッション、JWT、OAuth、アクセス制御を実装する際に使用。 |
Authentication & Authorization
📋 実行前チェック(必須)
このスキルを使うべきか?
前提条件
禁止事項の確認
トリガー
- ログイン機能実装時
- JWT/セッション管理時
- 権限チェック実装時
- パスワード処理時
🚨 鉄則
認証(誰か) ≠ 認可(何ができるか)。両方必要。
認証方式
JWT
const token = jwt.sign({ userId }, SECRET, {
expiresIn: '15m',
algorithm: 'HS256'
});
const decoded = jwt.verify(token, SECRET);
セッション
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: true,
sameSite: 'lax'
}
}));
認可
function authorize(requiredRole: string) {
return (req, res, next) => {
if (!req.user) return res.status(401).json({ error: 'Unauthorized' });
if (req.user.role !== requiredRole) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
}
if (resource.ownerId !== req.user.id && !req.user.isAdmin) {
return res.status(403).json({ error: 'Forbidden' });
}
パスワード
const hash = await bcrypt.hash(password, 12);
const isValid = await bcrypt.compare(password, hash);
🚫 禁止事項まとめ
user.password = password;
/api/data?token=xxx
if (user.role === 'admin') { showAdminPanel(); }
const SECRET = 'my-secret-key';
cookie: { httpOnly: false }