auth-expert

Authentication & Authorization Expert

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "auth-expert" with this command: npx skills add cin12211/orca-q/cin12211-orca-q-auth-expert

Authentication & Authorization Expert

Expert in JWT, OAuth 2.0, sessions, RBAC, and security best practices.

When Invoked

Recommend Specialist and Stop

  • API design patterns: recommend rest-api-expert

  • Database security: recommend database-expert

  • Infrastructure security: recommend devops-expert

Environment Detection

grep -E "passport|jsonwebtoken|next-auth|bcrypt" package.json 2>/dev/null find . -type f -name "auth" -not -path "./node_modules/*" | head -5

Problem Playbooks

JWT Implementation

Secure JWT Pattern:

import jwt from 'jsonwebtoken';

const ACCESS_TOKEN_SECRET = process.env.ACCESS_TOKEN_SECRET!; const ACCESS_TOKEN_EXPIRY = '15m';

function generateTokens(payload: TokenPayload) { const accessToken = jwt.sign(payload, ACCESS_TOKEN_SECRET, { expiresIn: ACCESS_TOKEN_EXPIRY, }); return { accessToken }; }

function authenticateToken(req: Request, res: Response, next: NextFunction) { const token = req.cookies.accessToken || req.headers.authorization?.replace('Bearer ', '');

if (!token) return res.status(401).json({ error: 'Auth required' });

try { req.user = jwt.verify(token, ACCESS_TOKEN_SECRET); next(); } catch { return res.status(401).json({ error: 'Invalid token' }); } }

Password Security

import bcrypt from 'bcrypt';

const SALT_ROUNDS = 12;

async function hashPassword(password: string): Promise<string> { return bcrypt.hash(password, SALT_ROUNDS); }

async function verifyPassword(plain: string, hashed: string): Promise<boolean> { return bcrypt.compare(plain, hashed); }

RBAC Pattern

const ROLES = { user: ['read:posts'], admin: ['read:posts', 'write:posts', 'delete:posts'], };

function requirePermission(permission: string) { return (req: Request, res: Response, next: NextFunction) => { const userRole = req.user?.role; if (!ROLES[userRole]?.includes(permission)) { return res.status(403).json({ error: 'Forbidden' }); } next(); }; }

Code Review Checklist

  • Passwords hashed with bcrypt (cost ≥ 12)

  • JWT secrets are strong (256-bit)

  • Cookies are httpOnly, secure, sameSite

  • Rate limiting on login

  • All routes have auth middleware

  • Resource-level authorization

Anti-Patterns

  • Storing JWT in localStorage - Use httpOnly cookies

  • Weak passwords - Enforce complexity

  • No rate limiting - Prevent brute force

  • Client-side auth only - Always validate on server

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

mongodb-expert

No summary provided by upstream source.

Repository SourceNeeds Review
General

jest-testing-expert

No summary provided by upstream source.

Repository SourceNeeds Review
General

css-styling-expert

No summary provided by upstream source.

Repository SourceNeeds Review
General

documentation-expert

No summary provided by upstream source.

Repository SourceNeeds Review