tribunal-kit 4.5.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/ARCHITECTURE.md +279 -277
- package/.agent/GEMINI.md +127 -121
- package/.agent/agents/accessibility-reviewer.md +187 -187
- package/.agent/agents/ai-code-reviewer.md +199 -199
- package/.agent/agents/api-architect.md +71 -66
- package/.agent/agents/backend-specialist.md +219 -215
- package/.agent/agents/cloud-engineer.md +98 -0
- package/.agent/agents/code-archaeologist.md +168 -161
- package/.agent/agents/database-architect.md +184 -184
- package/.agent/agents/db-latency-auditor.md +213 -216
- package/.agent/agents/debugger.md +198 -191
- package/.agent/agents/dependency-reviewer.md +106 -103
- package/.agent/agents/devops-engineer.md +218 -218
- package/.agent/agents/documentation-writer.md +209 -201
- package/.agent/agents/explorer-agent.md +167 -160
- package/.agent/agents/frontend-reviewer.md +162 -160
- package/.agent/agents/frontend-specialist.md +257 -248
- package/.agent/agents/game-developer.md +48 -48
- package/.agent/agents/logic-reviewer.md +118 -116
- package/.agent/agents/mobile-developer.md +197 -200
- package/.agent/agents/mobile-reviewer.md +159 -162
- package/.agent/agents/orchestrator.md +187 -181
- package/.agent/agents/penetration-tester.md +160 -157
- package/.agent/agents/performance-optimizer.md +183 -183
- package/.agent/agents/performance-reviewer.md +178 -178
- package/.agent/agents/precedence-reviewer.md +251 -250
- package/.agent/agents/product-manager.md +149 -142
- package/.agent/agents/product-owner.md +81 -80
- package/.agent/agents/project-planner.md +152 -142
- package/.agent/agents/qa-automation-engineer.md +216 -225
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/security-auditor.md +180 -174
- package/.agent/agents/seo-specialist.md +188 -193
- package/.agent/agents/sql-reviewer.md +159 -161
- package/.agent/agents/supervisor-agent.md +173 -184
- package/.agent/agents/swarm-worker-contracts.md +170 -166
- package/.agent/agents/swarm-worker-registry.md +92 -92
- package/.agent/agents/system-architect.md +85 -0
- package/.agent/agents/test-coverage-reviewer.md +158 -160
- package/.agent/agents/test-engineer.md +118 -118
- package/.agent/agents/throughput-optimizer.md +291 -299
- package/.agent/agents/type-safety-reviewer.md +182 -175
- package/.agent/agents/ui-ux-auditor.md +300 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/mcp_config.json +37 -40
- package/.agent/patterns/generator.md +11 -9
- package/.agent/patterns/inversion.md +14 -12
- package/.agent/patterns/pipeline.md +11 -9
- package/.agent/patterns/reviewer.md +15 -13
- package/.agent/patterns/tool-wrapper.md +11 -9
- package/.agent/routing_index.json +654 -0
- package/.agent/rules/GEMINI.md +358 -352
- package/.agent/scripts/compile_router.py +112 -0
- package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
- package/.agent/scripts/strengthen_skills.js +1 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
- package/.agent/skills/agent-organizer/SKILL.md +156 -150
- package/.agent/skills/agentic-patterns/SKILL.md +313 -315
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
- package/.agent/skills/api-patterns/SKILL.md +253 -247
- package/.agent/skills/api-security-auditor/SKILL.md +195 -193
- package/.agent/skills/app-builder/SKILL.md +573 -572
- package/.agent/skills/app-builder/templates/SKILL.md +108 -115
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
- package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
- package/.agent/skills/architecture/SKILL.md +226 -219
- package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
- package/.agent/skills/backend-security-expert/SKILL.md +16 -2
- package/.agent/skills/bash-linux/SKILL.md +179 -179
- package/.agent/skills/behavioral-modes/SKILL.md +239 -223
- package/.agent/skills/brainstorming/SKILL.md +498 -486
- package/.agent/skills/browser-native-ai/SKILL.md +57 -4
- package/.agent/skills/building-native-ui/SKILL.md +202 -202
- package/.agent/skills/cicd-pro/SKILL.md +442 -0
- package/.agent/skills/clean-code/SKILL.md +400 -381
- package/.agent/skills/cloud-architect/SKILL.md +439 -0
- package/.agent/skills/code-review-checklist/SKILL.md +203 -194
- package/.agent/skills/config-validator/SKILL.md +165 -165
- package/.agent/skills/containerization-pro/SKILL.md +452 -0
- package/.agent/skills/csharp-developer/SKILL.md +518 -518
- package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
- package/.agent/skills/database-design/SKILL.md +247 -240
- package/.agent/skills/deployment-procedures/SKILL.md +172 -169
- package/.agent/skills/devops-engineer/SKILL.md +345 -345
- package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
- package/.agent/skills/doc.md +209 -177
- package/.agent/skills/documentation-templates/SKILL.md +291 -279
- package/.agent/skills/edge-computing/SKILL.md +183 -181
- package/.agent/skills/error-resilience/SKILL.md +411 -428
- package/.agent/skills/extract-design-system/SKILL.md +160 -158
- package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
- package/.agent/skills/frontend-design/SKILL.md +208 -201
- package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
- package/.agent/skills/game-design-expert/SKILL.md +132 -129
- package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
- package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
- package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
- package/.agent/skills/git-pro/SKILL.md +435 -0
- package/.agent/skills/github-operations/SKILL.md +335 -329
- package/.agent/skills/gsap-core/SKILL.md +319 -308
- package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
- package/.agent/skills/gsap-performance/SKILL.md +139 -133
- package/.agent/skills/gsap-plugins/SKILL.md +486 -480
- package/.agent/skills/gsap-react/SKILL.md +202 -189
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
- package/.agent/skills/gsap-timeline/SKILL.md +165 -161
- package/.agent/skills/gsap-utils/SKILL.md +344 -338
- package/.agent/skills/harness-protocol/SKILL.md +48 -0
- package/.agent/skills/i18n-localization/SKILL.md +174 -163
- package/.agent/skills/intelligent-routing/SKILL.md +202 -246
- package/.agent/skills/knowledge-graph/SKILL.md +60 -52
- package/.agent/skills/lint-and-validate/SKILL.md +261 -261
- package/.agent/skills/llm-engineering/SKILL.md +400 -394
- package/.agent/skills/local-first/SKILL.md +178 -178
- package/.agent/skills/mcp-builder/SKILL.md +143 -142
- package/.agent/skills/mobile-design/SKILL.md +272 -263
- package/.agent/skills/monorepo-management/SKILL.md +335 -334
- package/.agent/skills/motion-engineering/SKILL.md +266 -234
- package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
- package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
- package/.agent/skills/observability/SKILL.md +343 -343
- package/.agent/skills/parallel-agents/SKILL.md +143 -146
- package/.agent/skills/performance-profiling/SKILL.md +259 -267
- package/.agent/skills/plan-writing/SKILL.md +150 -142
- package/.agent/skills/platform-engineer/SKILL.md +148 -147
- package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
- package/.agent/skills/powershell-windows/SKILL.md +162 -162
- package/.agent/skills/project-idioms/SKILL.md +137 -137
- package/.agent/skills/python-patterns/SKILL.md +260 -259
- package/.agent/skills/python-pro/SKILL.md +324 -323
- package/.agent/skills/react-specialist/SKILL.md +305 -277
- package/.agent/skills/readme-builder/SKILL.md +310 -300
- package/.agent/skills/realtime-patterns/SKILL.md +323 -319
- package/.agent/skills/red-team-tactics/SKILL.md +231 -218
- package/.agent/skills/rust-pro/SKILL.md +671 -673
- package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
- package/.agent/skills/server-management/SKILL.md +218 -214
- package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
- package/.agent/skills/skill-creator/SKILL.md +87 -86
- package/.agent/skills/sql-pro/SKILL.md +629 -629
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
- package/.agent/skills/swiftui-expert/SKILL.md +204 -201
- package/.agent/skills/system-design-pro/SKILL.md +345 -0
- package/.agent/skills/systematic-debugging/SKILL.md +153 -142
- package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
- package/.agent/skills/tdd-workflow/SKILL.md +169 -161
- package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
- package/.agent/skills/testing-patterns/SKILL.md +566 -579
- package/.agent/skills/trend-researcher/SKILL.md +243 -237
- package/.agent/skills/typescript-advanced/SKILL.md +336 -335
- package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
- package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
- package/.agent/skills/vue-expert/SKILL.md +294 -275
- package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
- package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
- package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
- package/.agent/skills/webapp-testing/SKILL.md +167 -169
- package/.agent/skills/webgpu-performance/SKILL.md +56 -2
- package/.agent/skills/whimsy-injector/SKILL.md +346 -325
- package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
- package/.agent/workflows/acf.md +141 -0
- package/.agent/workflows/api-tester.md +176 -151
- package/.agent/workflows/audit.md +150 -127
- package/.agent/workflows/brainstorm.md +134 -110
- package/.agent/workflows/changelog.md +140 -112
- package/.agent/workflows/create.md +168 -124
- package/.agent/workflows/debug.md +190 -165
- package/.agent/workflows/deploy.md +201 -180
- package/.agent/workflows/enhance.md +154 -128
- package/.agent/workflows/fix.md +136 -114
- package/.agent/workflows/generate.md +198 -183
- package/.agent/workflows/marathon.md +37 -11
- package/.agent/workflows/migrate.md +184 -160
- package/.agent/workflows/orchestrate.md +192 -168
- package/.agent/workflows/performance-benchmarker.md +135 -114
- package/.agent/workflows/plan.md +196 -173
- package/.agent/workflows/preview.md +103 -80
- package/.agent/workflows/refactor.md +192 -161
- package/.agent/workflows/review-ai.md +125 -101
- package/.agent/workflows/review.md +141 -116
- package/.agent/workflows/session.md +122 -94
- package/.agent/workflows/status.md +101 -79
- package/.agent/workflows/strengthen-skills.md +164 -138
- package/.agent/workflows/super-prompt.md +24 -0
- package/.agent/workflows/swarm.md +193 -179
- package/.agent/workflows/test.md +211 -189
- package/.agent/workflows/tribunal-backend.md +136 -105
- package/.agent/workflows/tribunal-database.md +122 -95
- package/.agent/workflows/tribunal-frontend.md +221 -96
- package/.agent/workflows/tribunal-full.md +129 -100
- package/.agent/workflows/tribunal-mobile.md +122 -95
- package/.agent/workflows/tribunal-performance.md +136 -110
- package/.agent/workflows/tribunal-speed.md +209 -183
- package/.agent/workflows/ui-ux-pro-max.md +145 -122
- package/README.md +107 -55
- package/bin/mcp-server.js +159 -0
- package/bin/tribunal-kit.js +105 -29
- package/bin/wrapper.js +16 -7
- package/mcp_config.json +9 -0
- package/package.json +94 -86
- package/scripts/changelog.js +4 -3
- package/scripts/validate-payload.js +6 -1
- package/scripts/postinstall.js +0 -127
|
@@ -1,193 +1,199 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: authentication-best-practices
|
|
3
|
-
description: Authentication and Authorization mastery. Best practices for OAuth2, OpenID Connect, JWT (JSON Web Tokens), session management, password hashing, MFA (Multi-Factor Authentication), RBAC/ABAC, SSO, and secure credential storage. Use when auditing or implementing login flows, identity systems, or access control.
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version: 2.0.0
|
|
6
|
-
last-updated: 2026-04-02
|
|
7
|
-
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Session Management vs. JWT
|
|
46
|
-
|
|
47
|
-
### 1. Stateful Sessions (Cookies)
|
|
48
|
-
**Best for**: Monolithic web apps, SSR apps (Next.js, Remix).
|
|
49
|
-
- Server stores session ID mapped to user data in Redis/DB.
|
|
50
|
-
- Client stores session ID in an `HttpOnly`, `Secure`, `SameSite=Lax/Strict` cookie.
|
|
51
|
-
- **Pros**: Immediate revocation, server-side truth, invisible to XSS.
|
|
52
|
-
- **Cons**: Requires DB lookup per request.
|
|
53
|
-
|
|
54
|
-
### 2. Stateless JWT (JSON Web Tokens)
|
|
55
|
-
**Best for**: Distributed APIs, Microservices, Native mobile apps.
|
|
56
|
-
- Server signs a token containing user claims.
|
|
57
|
-
- Client passes it in `Authorization: Bearer <token>` header.
|
|
58
|
-
- **Pros**: No DB lookup needed, easy cross-origin sharing.
|
|
59
|
-
- **Cons**: Cannot be easily revoked before expiration.
|
|
60
|
-
|
|
61
|
-
### The JWT "Refresh Token" Pattern
|
|
62
|
-
```typescript
|
|
63
|
-
// Scenario: API authentication
|
|
64
|
-
// 1. Access Token (Short-lived: 15 mins)
|
|
65
|
-
const accessToken = jwt.sign({ userId: user.id }, JWT_SECRET, {
|
|
66
|
-
expiresIn: "15m",
|
|
67
|
-
algorithm: "HS256" // ALWAYS explicitly specify
|
|
68
|
-
});
|
|
69
|
-
// 2. Refresh Token (Long-lived: 7 days, opaque string in DB)
|
|
70
|
-
const refreshToken = crypto.randomBytes(40).toString('hex');
|
|
71
|
-
await db.refreshTokens.create({ token: refreshToken, userId: user.id, expires: addDays(7) });
|
|
72
|
-
|
|
73
|
-
// Client flow:
|
|
74
|
-
// - Access token kept in memory (JS variable) to prevent XSS theft.
|
|
75
|
-
// - Refresh token kept in HttpOnly cookie.
|
|
76
|
-
// - When Access Token expires, endpoint reads cookie, validates DB, issues new Access Token.
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## OAuth2 & OIDC (OpenID Connect)
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
Roles:
|
|
85
|
-
1. Resource Owner (User)
|
|
86
|
-
2. Client (Your App)
|
|
87
|
-
3. Authorization Server (Google/GitHub/Auth0)
|
|
88
|
-
4. Resource Server (API)
|
|
89
|
-
|
|
90
|
-
Flow (Authorization Code + PKCE):
|
|
91
|
-
1. User clicks "Login with Google".
|
|
92
|
-
2. App generates `code_verifier` and `code_challenge`.
|
|
93
|
-
3. App redirects user to Google with `code_challenge`.
|
|
94
|
-
4. User logs in, Google redirects back to App with an authorization `code`.
|
|
95
|
-
5. App sends `code` + `code_verifier` to Google backend.
|
|
96
|
-
6. Google returns `id_token` (OIDC identity) and `access_token` (OAuth permissions).
|
|
97
|
-
|
|
98
|
-
// ❌ HALLUCINATION TRAP: Implicit Flow is deprecated.
|
|
99
|
-
// Never use Implicit Flow (response_type=token) where the token is returned in the URL hash.
|
|
100
|
-
// Always use Authorization Code Flow with PKCE, even for Single Page Apps (SPAs).
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Multi-Factor Authentication (MFA)
|
|
106
|
-
|
|
107
|
-
- **SMS**: Deprecated by NIST due to SIM swapping vulnerabilities. (Better than nothing, but avoid as primary MFA).
|
|
108
|
-
- **TOTP (Authenticator Apps)**: Standard implementations use HMAC-SHA1. Keep the secret key heavily encrypted at rest.
|
|
109
|
-
- **WebAuthn / Passkeys**: The modern gold standard. Replaces passwords entirely using hardware enclaves (FaceID, TouchID, YubiKey).
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## Authorization Models
|
|
114
|
-
|
|
115
|
-
### RBAC (Role-Based Access Control)
|
|
116
|
-
- Users have Roles (`admin`, `editor`, `viewer`).
|
|
117
|
-
- Roles have Permissions (`create:post`, `delete:user`).
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// ✅ Check permissions, not roles directly (more flexible)
|
|
121
|
-
if (!user.permissions.includes("delete:user")) {
|
|
122
|
-
throw new ForbiddenError();
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### ABAC (Attribute-Based Access Control)
|
|
127
|
-
- Access based on context (e.g., "User can edit Document if Document.department == User.department").
|
|
128
|
-
|
|
129
|
-
```typescript
|
|
130
|
-
// Example Policy
|
|
131
|
-
function canEditPost(user: User, post: Post): boolean {
|
|
132
|
-
if (user.role === "admin") return true;
|
|
133
|
-
if (post.authorId === user.id) return true;
|
|
134
|
-
if (post.status === "draft" && user.department === "content") return true;
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
147
|
-
|
|
148
|
-
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
149
|
-
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
150
|
-
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
151
|
-
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
152
|
-
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
**Slash command: `/review` or `/tribunal-full`**
|
|
159
|
-
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
160
|
-
|
|
161
|
-
### ❌ Forbidden AI Tropes
|
|
162
|
-
|
|
163
|
-
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
164
|
-
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
165
|
-
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
Review these questions before confirming output:
|
|
170
|
-
```
|
|
171
|
-
✅ Did I rely ONLY on real, verified tools and methods?
|
|
172
|
-
✅ Is this solution appropriately scoped to the user's constraints?
|
|
173
|
-
✅ Did I handle potential failure modes and edge cases?
|
|
174
|
-
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
178
|
-
|
|
179
|
-
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
180
|
-
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
181
|
-
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
## Pre-Flight Checklist
|
|
185
|
-
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
186
|
-
- [ ] Have I checked the environment for relevant existing implementations?
|
|
187
|
-
|
|
188
|
-
## VBC Protocol (Verification-Before-Completion)
|
|
189
|
-
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
1
|
+
---
|
|
2
|
+
name: authentication-best-practices
|
|
3
|
+
description: Authentication and Authorization mastery. Best practices for OAuth2, OpenID Connect, JWT (JSON Web Tokens), session management, password hashing, MFA (Multi-Factor Authentication), RBAC/ABAC, SSO, and secure credential storage. Use when auditing or implementing login flows, identity systems, or access control.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-02
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
routing:
|
|
9
|
+
domain: general
|
|
10
|
+
tier: basic
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Authentication & Authorization — Identity Mastery
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Passwords & Hashing
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// ❌ BAD: md5, sha1, sha256 (too fast, vulnerable to brute force/rainbow tables)
|
|
21
|
+
const hash = crypto.createHash("sha256").update(password).digest("hex");
|
|
22
|
+
|
|
23
|
+
// ✅ GOOD: Argon2 (memory-hard, ASIC resistant) or bcrypt
|
|
24
|
+
import * as argon2 from "argon2";
|
|
25
|
+
|
|
26
|
+
async function hashPassword(password: string): Promise<string> {
|
|
27
|
+
// Argon2 hashes include the salt inherently in the resulting string
|
|
28
|
+
return await argon2.hash(password, {
|
|
29
|
+
type: argon2.argon2id, // recommended variant
|
|
30
|
+
memoryCost: 2 ** 16, // 64 MB
|
|
31
|
+
timeCost: 3, // iterations
|
|
32
|
+
parallelism: 1, // threads
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function verifyPassword(hash: string, password: string): Promise<boolean> {
|
|
37
|
+
return await argon2.verify(hash, password);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Password Policies
|
|
190
42
|
|
|
43
|
+
- **Length over complexity**: Require minimum 12 characters. Stop requiring arbitrary symbols (e.g., `!@#`).
|
|
44
|
+
- **Check against breaches**: Use HaveIBeenPwned API or similar to reject compromised passwords during signup.
|
|
45
|
+
- **Never expire passwords arbitrarily**: Only force resets if there is evidence of a breach.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Session Management vs. JWT
|
|
50
|
+
|
|
51
|
+
### 1. Stateful Sessions (Cookies)
|
|
52
|
+
|
|
53
|
+
**Best for**: Monolithic web apps, SSR apps (Next.js, Remix).
|
|
54
|
+
|
|
55
|
+
- Server stores session ID mapped to user data in Redis/DB.
|
|
56
|
+
- Client stores session ID in an `HttpOnly`, `Secure`, `SameSite=Lax/Strict` cookie.
|
|
57
|
+
- **Pros**: Immediate revocation, server-side truth, invisible to XSS.
|
|
58
|
+
- **Cons**: Requires DB lookup per request.
|
|
59
|
+
|
|
60
|
+
### 2. Stateless JWT (JSON Web Tokens)
|
|
61
|
+
|
|
62
|
+
**Best for**: Distributed APIs, Microservices, Native mobile apps.
|
|
63
|
+
|
|
64
|
+
- Server signs a token containing user claims.
|
|
65
|
+
- Client passes it in `Authorization: Bearer <token>` header.
|
|
66
|
+
- **Pros**: No DB lookup needed, easy cross-origin sharing.
|
|
67
|
+
- **Cons**: Cannot be easily revoked before expiration.
|
|
68
|
+
|
|
69
|
+
### The JWT "Refresh Token" Pattern
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// Scenario: API authentication
|
|
73
|
+
// 1. Access Token (Short-lived: 15 mins)
|
|
74
|
+
const accessToken = jwt.sign({ userId: user.id }, JWT_SECRET, {
|
|
75
|
+
expiresIn: "15m",
|
|
76
|
+
algorithm: "HS256", // ALWAYS explicitly specify
|
|
77
|
+
});
|
|
78
|
+
// 2. Refresh Token (Long-lived: 7 days, opaque string in DB)
|
|
79
|
+
const refreshToken = crypto.randomBytes(40).toString("hex");
|
|
80
|
+
await db.refreshTokens.create({ token: refreshToken, userId: user.id, expires: addDays(7) });
|
|
81
|
+
|
|
82
|
+
// Client flow:
|
|
83
|
+
// - Access token kept in memory (JS variable) to prevent XSS theft.
|
|
84
|
+
// - Refresh token kept in HttpOnly cookie.
|
|
85
|
+
// - When Access Token expires, endpoint reads cookie, validates DB, issues new Access Token.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## OAuth2 & OIDC (OpenID Connect)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Roles:
|
|
94
|
+
1. Resource Owner (User)
|
|
95
|
+
2. Client (Your App)
|
|
96
|
+
3. Authorization Server (Google/GitHub/Auth0)
|
|
97
|
+
4. Resource Server (API)
|
|
98
|
+
|
|
99
|
+
Flow (Authorization Code + PKCE):
|
|
100
|
+
1. User clicks "Login with Google".
|
|
101
|
+
2. App generates `code_verifier` and `code_challenge`.
|
|
102
|
+
3. App redirects user to Google with `code_challenge`.
|
|
103
|
+
4. User logs in, Google redirects back to App with an authorization `code`.
|
|
104
|
+
5. App sends `code` + `code_verifier` to Google backend.
|
|
105
|
+
6. Google returns `id_token` (OIDC identity) and `access_token` (OAuth permissions).
|
|
106
|
+
|
|
107
|
+
// ❌ HALLUCINATION TRAP: Implicit Flow is deprecated.
|
|
108
|
+
// Never use Implicit Flow (response_type=token) where the token is returned in the URL hash.
|
|
109
|
+
// Always use Authorization Code Flow with PKCE, even for Single Page Apps (SPAs).
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Multi-Factor Authentication (MFA)
|
|
115
|
+
|
|
116
|
+
- **SMS**: Deprecated by NIST due to SIM swapping vulnerabilities. (Better than nothing, but avoid as primary MFA).
|
|
117
|
+
- **TOTP (Authenticator Apps)**: Standard implementations use HMAC-SHA1. Keep the secret key heavily encrypted at rest.
|
|
118
|
+
- **WebAuthn / Passkeys**: The modern gold standard. Replaces passwords entirely using hardware enclaves (FaceID, TouchID, YubiKey).
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Authorization Models
|
|
123
|
+
|
|
124
|
+
### RBAC (Role-Based Access Control)
|
|
125
|
+
|
|
126
|
+
- Users have Roles (`admin`, `editor`, `viewer`).
|
|
127
|
+
- Roles have Permissions (`create:post`, `delete:user`).
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// ✅ Check permissions, not roles directly (more flexible)
|
|
131
|
+
if (!user.permissions.includes("delete:user")) {
|
|
132
|
+
throw new ForbiddenError();
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### ABAC (Attribute-Based Access Control)
|
|
137
|
+
|
|
138
|
+
- Access based on context (e.g., "User can edit Document if Document.department == User.department").
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
// Example Policy
|
|
142
|
+
function canEditPost(user: User, post: Post): boolean {
|
|
143
|
+
if (user.role === "admin") return true;
|
|
144
|
+
if (post.authorId === user.id) return true;
|
|
145
|
+
if (post.status === "draft" && user.department === "content") return true;
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
155
|
+
|
|
156
|
+
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
157
|
+
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
158
|
+
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
159
|
+
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
160
|
+
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
165
|
+
**Active reviewers: `logic-reviewer` · `security-auditor`**
|
|
166
|
+
|
|
167
|
+
### ❌ Forbidden AI Tropes
|
|
168
|
+
|
|
169
|
+
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
170
|
+
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
171
|
+
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
172
|
+
|
|
173
|
+
Review these questions before confirming output:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
✅ Did I rely ONLY on real, verified tools and methods?
|
|
177
|
+
✅ Is this solution appropriately scoped to the user's constraints?
|
|
178
|
+
✅ Did I handle potential failure modes and edge cases?
|
|
179
|
+
✅ Have I avoided generic boilerplate that doesn't add value?
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
183
|
+
|
|
184
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
185
|
+
|
|
186
|
+
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
187
|
+
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
188
|
+
|
|
189
|
+
## Pre-Flight Checklist
|
|
190
|
+
|
|
191
|
+
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
192
|
+
- [ ] Have I checked the environment for relevant existing implementations?
|
|
193
|
+
|
|
194
|
+
## VBC Protocol (Verification-Before-Completion)
|
|
195
|
+
|
|
196
|
+
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
191
197
|
|
|
192
198
|
---
|
|
193
199
|
|
|
@@ -217,6 +223,7 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
217
223
|
### ✅ Pre-Flight Self-Audit
|
|
218
224
|
|
|
219
225
|
Review these questions before confirming output:
|
|
226
|
+
|
|
220
227
|
```
|
|
221
228
|
✅ Did I rely ONLY on real, verified tools and methods?
|
|
222
229
|
✅ Is this solution appropriately scoped to the user's constraints?
|
|
@@ -227,5 +234,6 @@ Review these questions before confirming output:
|
|
|
227
234
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
228
235
|
|
|
229
236
|
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
237
|
+
|
|
230
238
|
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
231
239
|
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
@@ -5,11 +5,15 @@ allowed-tools: Read, Write, Edit, Glob, Grep
|
|
|
5
5
|
version: 1.0.0
|
|
6
6
|
last-updated: 2026-05-22
|
|
7
7
|
applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
|
|
8
|
+
routing:
|
|
9
|
+
domain: general
|
|
10
|
+
tier: basic
|
|
8
11
|
---
|
|
9
12
|
|
|
10
13
|
# Backend Security Expert — Modern Server Architectures
|
|
11
14
|
|
|
12
15
|
## Hallucination Traps (Read First)
|
|
16
|
+
|
|
13
17
|
- ❌ Recommending session tokens without algorithm enforcement → ✅ Always verify JWT algorithms (`alg: "HS256"`) to prevent "None" attacks.
|
|
14
18
|
- ❌ Treating ORMs as automatically secure → ✅ Prisma and Drizzle can still be vulnerable if raw SQL/queries are dynamically interpolated.
|
|
15
19
|
- ❌ Assuming Next.js Server Actions are private APIs → ✅ Server Actions are public endpoints and must be authenticated and rate-limited.
|
|
@@ -18,22 +22,27 @@ applies-to-model: gemini-3-1-pro, claude-3-7-sonnet
|
|
|
18
22
|
---
|
|
19
23
|
|
|
20
24
|
## 1. Next.js Server Actions & Edge APIs
|
|
25
|
+
|
|
21
26
|
Server Actions create implicit API endpoints. They must be treated like raw REST routes.
|
|
22
|
-
|
|
27
|
+
|
|
28
|
+
- **Authentication**: Validate the session ID/token at the very top of _every_ Server Action.
|
|
23
29
|
- **Input Validation**: Parse all inputs using Zod. Do not trust TypeScript types, as they do not exist at runtime.
|
|
24
30
|
- **Rate Limiting**: Apply `@upstash/ratelimit` or similar to prevent brute force and abuse on public-facing actions.
|
|
25
31
|
|
|
26
32
|
## 2. Authentication & Authorization (RBAC)
|
|
33
|
+
|
|
27
34
|
- **Role-Based Access**: Check if the authenticated user has permission to perform the specific action, not just if they are logged in.
|
|
28
35
|
- **IDOR Prevention**: Always verify that the resource being modified belongs to the user requesting the modification (e.g., `WHERE userId = session.userId`).
|
|
29
36
|
- **Secrets Management**: Never hardcode API keys. Ensure they are loaded from `.env` and fail loudly if missing.
|
|
30
37
|
|
|
31
38
|
## 3. Database & ORM Security
|
|
39
|
+
|
|
32
40
|
- **NoSQL/ORM Injection**: Avoid passing raw JSON or objects directly into query constraints (e.g., MongoDB `$where` or Prisma raw queries).
|
|
33
41
|
- **Mass Assignment**: Never destructure user input directly into a database create/update call. Explicitly pick the fields allowed to be updated.
|
|
34
42
|
- **Query Depth**: For GraphQL backends, always implement depth limiting and cost analysis to prevent query-based DDoS.
|
|
35
43
|
|
|
36
44
|
## 4. Headers & Server Hardening
|
|
45
|
+
|
|
37
46
|
- **CORS**: Never use wildcard `Access-Control-Allow-Origin: *` for authenticated routes.
|
|
38
47
|
- **Security Headers**: Ensure Helmet (or equivalent Next.js headers config) is active for HSTS, X-Frame-Options, and Content-Type-Options.
|
|
39
48
|
|
|
@@ -59,6 +68,7 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
59
68
|
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
60
69
|
|
|
61
70
|
Review these questions before confirming output:
|
|
71
|
+
|
|
62
72
|
```
|
|
63
73
|
✅ Did I rely ONLY on real, verified tools and methods?
|
|
64
74
|
✅ Is this solution appropriately scoped to the user's constraints?
|
|
@@ -69,16 +79,18 @@ Review these questions before confirming output:
|
|
|
69
79
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
70
80
|
|
|
71
81
|
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
82
|
+
|
|
72
83
|
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
73
84
|
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
74
85
|
|
|
75
86
|
## Pre-Flight Checklist
|
|
87
|
+
|
|
76
88
|
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
77
89
|
- [ ] Have I checked the environment for relevant existing implementations?
|
|
78
90
|
|
|
79
91
|
## VBC Protocol (Verification-Before-Completion)
|
|
80
|
-
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
81
92
|
|
|
93
|
+
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
82
94
|
|
|
83
95
|
---
|
|
84
96
|
|
|
@@ -108,6 +120,7 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
108
120
|
### ✅ Pre-Flight Self-Audit
|
|
109
121
|
|
|
110
122
|
Review these questions before confirming output:
|
|
123
|
+
|
|
111
124
|
```
|
|
112
125
|
✅ Did I rely ONLY on real, verified tools and methods?
|
|
113
126
|
✅ Is this solution appropriately scoped to the user's constraints?
|
|
@@ -118,5 +131,6 @@ Review these questions before confirming output:
|
|
|
118
131
|
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
119
132
|
|
|
120
133
|
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
134
|
+
|
|
121
135
|
- ❌ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
122
136
|
- ✅ **Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|