Install
$ agentstack add skill-igbuend-grimbard-authentication-pattern ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Authentication Security Pattern
Authentication verifies that a subject (user, service, device) is who they claim to be before allowing system access. This pattern is a prerequisite for authorization and auditing.
When to Use
Use this pattern when:
- Designing a new login or identity verification system
- Reviewing existing authentication mechanisms for flaws
- Integrating with external identity providers (OAuth, SAML)
- Implementing API authentication (keys, tokens)
- Establishing audit trails for user actions
Core Components
Roles
| Role | Type | Responsibility | |------|------|----------------| | Subject | Entity | Requests actions from the system | | Enforcer | Enforcement Point | Intercepts requests; ensures authentication before processing. Must be incorporated into the system | | Verifier | Decision Point | Validates credentials against evidence to determine authentication success | | Evidence Provider | Entity | Stores/provides evidence for credential verification (internal or external) |
Data Elements
- credential: Proof of identity provided by Subject
- evidence: Data used by Verifier to validate credentials
- principal: Authenticated identity established after successful verification
- action: The operation Subject wants to perform
Authentication Flow
Subject → [action + credential] → Enforcer
Enforcer → [credential] → Verifier
Verifier → [request evidence] → Evidence Provider
Evidence Provider → [evidence] → Verifier
Verifier → [principal or error] → Enforcer
Enforcer → [action + principal] → System (if authenticated)
→ [error] → Subject (if failed)
- Subject requests action with credential
- Enforcer intercepts and forwards credential to Verifier
- Verifier requests evidence from Evidence Provider
- Verifier compares credential against evidence
- On success: Enforcer forwards action + principal to System
- On failure: Subject receives authentication error
Subject Registration
Registration establishes the credential/evidence pair. Three approaches:
- Subject-provided: Subject chooses both identifier and credential
- Hybrid: Subject provides identifier; system generates credential
- System-assigned: System generates both identifier and credential
Key requirements:
- Verify Subject actually owns the claimed identity (e.g., email verification)
- Protect credential transmission during registration
- Consider secure channels for initial credential delivery
Credential and Evidence Selection
Credential factors:
- Something you know: passwords, PINs
- Something you have: tokens, keys, devices
- Something you are: biometrics
Evidence guidelines:
- Never store credentials directly; use derived evidence (e.g., hashed passwords)
- Evidence leakage should not directly reveal credentials
- Protect evidence integrity to prevent tampering
Security Considerations
Enforcer Placement
- Must be impossible to bypass
- Place at system boundary where all requests enter
- Consider defense in depth with multiple enforcement points
Evidence Protection
- Encrypt evidence at rest
- Implement integrity checks to detect tampering
- Limit access to Evidence Provider
Rate Limiting
Prevent brute-force attacks:
- Limit authentication attempts per time window
- Implement exponential backoff
- Consider account lockout policies
- Protect against DoS on authentication endpoints
Credential Change
- Require current credential verification before changes
- Force re-authentication after credential updates
- Invalidate active sessions on credential change
Credential Reset
- Use out-of-band verification (email, SMS)
- Time-limit reset tokens
- Never expose whether an account exists
Logging
- Log authentication attempts (success and failure)
- Never log credentials
- Include timestamps and source identifiers
Related Patterns
- Password-based authentication: Uses identifier + password as credential
- Opaque token-based authentication: Uses system-issued tokens (e.g., session IDs)
- Verifiable token-based authentication: Uses self-contained tokens (e.g., JWTs)
- Multi-factor authentication: Combines multiple credential factors
- Session-based access control: Combines opaque tokens with authorization
Common Vulnerabilities (OWASP/IEEE Top 10)
- Broken authentication mechanisms
- Credential stuffing susceptibility
- Weak credential policies
- Missing rate limiting
- Insecure credential storage
- Session fixation
- Bypassing authentication checks
Implementation Examples
Python (Secure Password Verification)
BAD (Vulnerable):
# ❌ VULNERABILITY: Plaintext comparison and timing attack risk
def login(username, password):
user = database.get_user(username)
if user and user.password == password: # Never store plaintext!
return True
return False
GOOD (Secure):
import hmac
from werkzeug.security import check_password_hash
def login(username, password):
user = database.get_user(username)
# ✅ Use robust hashing (Argon2/PBKDF2/bcrypt) via verified library
if user and check_password_hash(user.password_hash, password):
return True
return False
JavaScript (Node.js/Express)
BAD (Vulnerable):
// ❌ VULNERABILITY: Broken Logic
app.post('/login', (req, res) => {
const user = db.findUser(req.body.username);
if (user && user.password === req.body.password) { // Plaintext
res.status(200).send({ token: user.id }); // Leaking ID as token
}
});
GOOD (Secure):
const bcrypt = require('bcrypt'); // or argon2
app.post('/login', async (req, res) => {
const user = await db.findUser(req.body.username);
// ✅ Robust comparison, handle timing attacks implicitly by library
if (user && await bcrypt.compare(req.body.password, user.hash)) {
req.session.userId = user.id; // Use secure session
return res.status(200).send({ message: "Authenticated" });
}
// Generic error message to prevent enumeration
res.status(401).send({ error: "Invalid credentials" });
});
Implementation Checklist
- [ ] Enforcer intercepts ALL entry points
- [ ] Credentials never stored in plaintext
- [ ] Evidence protected at rest and in transit
- [ ] Rate limiting implemented
- [ ] Failed attempts logged (without credentials)
- [ ] Secure credential reset flow
- [ ] Session invalidation on credential change
- [ ] Identity verification during registration
References
- Source: Security Pattern Catalogue - DistriNet Research
- OWASP Authentication Cheat Sheet
- IEEE Top 10 Security Flaws
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: igbuend
- Source: igbuend/grimbard
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.