EV

evernote-security-basics

Security guidelines for storing API credentials and implementing secure OAuth flows with Evernote.

Install

mkdir -p .claude/skills/evernote-security-basics && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8061" && unzip -o skill.zip -d .claude/skills/evernote-security-basics && rm skill.zip

Installs to .claude/skills/evernote-security-basics

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Implement security best practices for Evernote integrations.
60 charsno explicit “when” trigger
Advanced

Key capabilities

  • Manage credentials via environment variables or secrets managers
  • Implement CSRF-protected OAuth 1.0a flows
  • Encrypt access tokens at rest using AES-256-GCM
  • Sanitize user input for ENML content
  • Redact sensitive information from logs

How it works

The skill enforces security by requiring environment-based credential storage, token encryption, and input sanitization to prevent common vulnerabilities.

Inputs & outputs

You give it
API credentials and user input
You get back
Securely stored tokens and sanitized content

When to use evernote-security-basics

  • Secure OAuth implementation
  • Manage API credentials
  • Hardening integrations

About this skill

Evernote Security Basics

Overview

Security best practices for Evernote API integrations, covering credential management, OAuth hardening, token storage, data protection, and secure logging patterns.

Prerequisites

  • Evernote SDK setup
  • Understanding of OAuth 1.0a
  • Basic cryptography concepts (AES encryption, hashing)

Instructions

Step 1: Credential Management

Store consumerKey, consumerSecret, and access tokens in environment variables or a secrets manager (AWS Secrets Manager, GCP Secret Manager, HashiCorp Vault). Never commit credentials to source control. Add .env to .gitignore.

// Load from environment, fail fast if missing
const requiredVars = ['EVERNOTE_CONSUMER_KEY', 'EVERNOTE_CONSUMER_SECRET'];
for (const v of requiredVars) {
  if (!process.env[v]) throw new Error(`Missing required env var: ${v}`);
}

Step 2: Secure OAuth Flow

Add CSRF protection with a state parameter stored in the session. Validate the callback URL matches your registered domain. Use HTTPS-only for all OAuth endpoints. Set secure cookie flags for session tokens.

// Generate CSRF token for OAuth state
const csrfToken = crypto.randomBytes(32).toString('hex');
req.session.oauthCsrf = csrfToken;

// Verify on callback
if (req.query.state !== req.session.oauthCsrf) {
  return res.status(403).send('CSRF validation failed');
}

Step 3: Encrypted Token Storage

Encrypt access tokens at rest using AES-256-GCM before storing in your database. Decrypt only when making API calls. Store the encryption key separately from the database.

Step 4: Input Validation

Sanitize all user input before embedding in ENML. Validate note titles (max 255 chars), tag names (max 100 chars, no commas), and notebook names (max 100 chars). Strip forbidden HTML elements and attributes.

Step 5: Secure Logging

Redact access tokens, consumer secrets, and user email addresses from log output. Log only the first 8 characters of tokens for debugging correlation.

function redactToken(token) {
  if (!token || token.length < 12) return '***';
  return token.slice(0, 8) + '...[REDACTED]';
}

Step 6: Token Lifecycle Management

Track token expiration (edam_expires), implement proactive refresh before expiry, and handle AUTH_EXPIRED errors gracefully. Tokens default to 1-year validity but users can set shorter durations.

For the complete security implementation including encrypted storage, CSRF-protected OAuth, input validation, and audit logging, see Implementation Guide.

Output

  • Environment-based credential management with validation
  • CSRF-protected OAuth 1.0a flow
  • AES-256-GCM encrypted token storage
  • Input sanitization for ENML content and metadata
  • Redacted logging utility
  • Token expiration tracking and refresh

Error Handling

ErrorCauseSolution
INVALID_AUTHToken revoked or invalidRe-authenticate via OAuth; check token not corrupted during encryption
AUTH_EXPIREDToken past expiration dateImplement proactive refresh before edam_expires
PERMISSION_DENIEDAPI key lacks required scopeRequest appropriate permissions from Evernote
CSRF mismatchSession expired or attack attemptRegenerate CSRF token and restart OAuth flow

Resources

Next Steps

For production deployment checklist, see evernote-prod-checklist.

Examples

Secure credential setup: Store credentials in AWS Secrets Manager, load at startup, validate all required values are present, and fail fast on missing configuration.

Token rotation: Monitor edam_expires for all stored tokens, send re-authentication emails 30 days before expiry, and gracefully degrade to read-only mode when tokens expire.

When not to use it

  • When committing credentials to source control

Prerequisites

Evernote SDK setupUnderstanding of OAuth 1.0aBasic cryptography concepts

Limitations

  • Requires proactive token refresh before edam_expires

How it compares

It provides a hardened security layer for Evernote integrations compared to standard SDK usage.

Compared to similar skills

evernote-security-basics side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
evernote-security-basics (this skill)027dReviewAdvanced
auth-patterns77moReviewIntermediate
clerk-incident-runbook127dCautionIntermediate
customerio-security-basics127dReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

auth-patterns

davepoon

This skill should be used when the user asks about "authentication in Next.js", "NextAuth", "Auth.js", "middleware auth", "protected routes", "session management", "JWT", "login flow", or needs guidance on implementing authentication and authorization in Next.js applications.

720

clerk-incident-runbook

jeremylongshore

Incident response procedures for Clerk authentication issues. Use when handling auth outages, security incidents, or production authentication problems. Trigger with phrases like "clerk incident", "clerk outage", "clerk down", "auth not working", "clerk emergency".

110

customerio-security-basics

jeremylongshore

Apply Customer.io security best practices. Use when implementing secure integrations, handling PII, or setting up proper access controls. Trigger with phrases like "customer.io security", "customer.io pii", "secure customer.io", "customer.io gdpr".

15

gamma-enterprise-rbac

jeremylongshore

Implement enterprise role-based access control for Gamma integrations. Use when configuring team permissions, multi-tenant access, or enterprise authorization patterns. Trigger with phrases like "gamma RBAC", "gamma permissions", "gamma access control", "gamma enterprise", "gamma roles".

12

jwt-auth

dadbodgeoff

Implement secure JWT authentication with refresh token rotation, secure storage, and automatic renewal. Use when building authentication for SPAs, mobile apps, or APIs that need stateless auth with refresh capabilities.

12

maintainx-security-basics

jeremylongshore

Configure MaintainX API security, credential management, and access control. Use when securing API keys, implementing access controls, or hardening your MaintainX integration. Trigger with phrases like "maintainx security", "maintainx api key security", "secure maintainx", "maintainx credentials", "maintainx access control".

11

Search skills

Search the agent skills registry