Skip to content

samki6576/Agent-password

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# AgentPassport Lite A production-ready demonstration of secure AI agent access to external APIs using **Auth0 Token Vault**. **The Core Security Pattern:** AI agents call a secure gateway without handling credentials. The gateway uses Auth0 Token Vault to manage tokens securely, call the real API, and return data to the agent. --- ## 🎯 Key Features ✅ **100% Auth0 Token Vault Integration** - Credentials stored securely server-side ✅ **AI Agents Never See Tokens** - Only call `/api/get-events` ✅ **Production-Ready Code** - Secure cookies, token refresh, error handling ✅ **Google Calendar Integration** - Real API (not mocked) ✅ **Complete Examples** - Python AI agent, JavaScript/TypeScript SDKs ✅ **No Secrets in Code** - All env vars via Vercel Dashboard --- ## 🏗️ Architecture ``` ┌─────────────────┐ │ User Browser │ │ │ │ [Dashboard UI] │ │ Calls gateway │ └────────┬────────┘ │ ▼ ┌─────────────────────────────────────┐ │ AgentPassport Secure Gateway │ │ (Next.js API Routes) │ │ │ │ /api/auth/login → Auth0 │ │ /api/auth/callback → Token Store │ │ /api/get-events ← AI Agents │ │ ↓ Token Vault │ │ (HTTP-only) │ └────────┬────────────────────────────┘ │ (with access_token cookie) ▼ ┌─────────────────┐ │ Auth0 │ │ Token Vault │ │ │ │ ▪ Stores token │ │ ▪ Refreshes │ │ ▪ Validates │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ Google │ │ Calendar API │ │ (read:calendar)│ └─────────────────┘ ┌──────────────────────────────────┐ │ AI Agent (Python/JavaScript) │ │ │ │ import requests │ │ response = requests.get( │ │ "gateway/api/get-events" │ ← NO TOKEN IN REQUEST! │ ) │ │ events = response.json() │ └──────────────────────────────────┘ ``` --- ## 📋 Project Structure ``` agentpassport-lite/ ├── app/ │ ├── page.tsx # Dashboard UI │ ├── layout.tsx # Root layout │ ├── globals.css # Global styles │ └── api/ │ └── auth/ │ ├── login/route.ts # OAuth redirect │ ├── callback/route.ts # Token exchange │ └── logout/route.ts # Session clear │ └── get-events/route.ts # Secure gateway ⭐ ├── src/ │ └── lib/ │ ├── auth0.ts # Auth0 config & helpers │ └── google-calendar.ts # Google Calendar API ├── ai-agent.py # Python agent example ├── .env.local.example # Environment template ├── package.json ├── tsconfig.json └── README.md ``` --- ## 🚀 Quick Start ### 1. Prerequisites - Node.js 18+ - Auth0 account (free tier works) - Google Cloud project with Calendar API enabled ### 2. Clone & Install ```bash # Clone or download this repo cd agentpassport-lite # Install dependencies pnpm install # or npm install ``` ### 3. Auth0 Setup (Required for production, optional for demo) **Create an Auth0 Application:** 1. Go to [Auth0 Dashboard](https://manage.auth0.com) 2. Create a new "Regular Web Application" 3. In **Settings**, copy: - **Domain** → `AUTH0_DOMAIN` - **Client ID** → `AUTH0_CLIENT_ID` - **Client Secret** → `AUTH0_CLIENT_SECRET` 4. Configure **Allowed Callback URLs:** ``` http://localhost:3000/api/auth/callback https://your-deployed-domain.vercel.app/api/auth/callback ``` 5. **Token Vault Setup** (Auth0 Actions): - Go to **Actions** → **Create Action** - Select **Post-Login** trigger - Add this code to include scopes: ```javascript exports.onExecutePostLogin = async (event, api) => { // Ensure calendar scope is requested api.idToken.setCustomClaim("scope", "openid profile email read:calendar"); }; ``` ### 4. Google Calendar Setup 1. Create a [Google Cloud Project](https://console.cloud.google.com) 2. Enable **Google Calendar API** 3. Create an **OAuth 2.0 Consent Screen** (External) 4. No additional credentials needed — Auth0 handles the OAuth flow ### 5. Environment Variables **Copy `.env.local.example` to `.env.local`:** ```bash cp .env.local.example .env.local ``` **Fill in your values:** ```env AUTH0_DOMAIN=your-auth0-domain.auth0.com AUTH0_CLIENT_ID=your-client-id-here AUTH0_CLIENT_SECRET=your-client-secret-here NEXT_PUBLIC_APP_URL=http://localhost:3000 ``` ### 6. Run Locally ```bash pnpm dev ``` Open [http://localhost:3000](http://localhost:3000) --- ## 🧑‍💻 Using the Dashboard 1. **Connect Calendar:** Click "Connect Google Calendar" 2. **Authorize:** Follow Auth0 → Google OAuth flow 3. **View Events:** See your upcoming calendar events 4. **Understand Security:** Token is stored server-side in HTTP-only cookie --- ## 🤖 AI Agent Usage ### Python Example ```bash # Install requests library pip install requests # Run the agent python ai-agent.py ``` **What happens:** 1. Agent calls `http://localhost:3000/api/get-events` 2. Gateway retrieves your token from HTTP-only cookie (server-side only) 3. Gateway calls Google Calendar API 4. Agent receives calendar events (no token exposure) ### JavaScript/Node.js Example ```javascript // Agent calls the gateway const response = await fetch('http://localhost:3000/api/get-events'); const { events } = await response.json(); // Process events events.forEach(event => { console.log(`📅 ${event.summary} at ${event.start.dateTime}`); }); ``` ### How to Extend The gateway pattern works for **any API**: 1. **Add new scope** to Auth0 flow (e.g., `read:calendar` → `write:email`) 2. **Create new gateway endpoint** (e.g., `/api/send-email`) 3. **Handle token retrieval** from HTTP-only cookie 4. **Call external API** with token 5. **Return data to agent** (token stays hidden) --- ## 🔒 Security Implementation ### Token Storage - **Access Token:** HTTP-only, Secure, SameSite=Strict cookie - **Refresh Token:** HTTP-only, Secure, SameSite=Strict cookie (if available) - **Token Expiry:** Stored in regular cookie for client-side awareness ### Token Lifecycle 1. **User Logs In:** - Browser redirects to `/api/auth/login` - Auth0 OAuth flow - Token exchanged via `/api/auth/callback` - Token stored in HTTP-only cookie 2. **Agent Calls Gateway:** - Agent calls `/api/get-events` (no token) - Gateway retrieves token from HTTP-only cookie - Gateway checks expiry, refreshes if needed - Gateway calls Google Calendar API - Gateway returns events to agent 3. **Token Refresh:** - If token expired, gateway uses refresh token - Requests new token from Auth0 Token Vault - Updates cookie with new token - Continues with API call 4. **User Disconnects:** - User clicks "Disconnect Calendar" - Cookies cleared - Session ended ### Why HTTP-Only Cookies? - **Not accessible to JavaScript** → XSS attacks can't steal tokens - **Sent automatically with requests** → Agent doesn't need to handle them - **Secure flag** → Only sent over HTTPS in production - **SameSite=Strict** → CSRF attacks blocked --- ## 📤 Deployment to Vercel ### 1. Push to GitHub ```bash git add . git commit -m "AgentPassport Lite - Production Ready" git push origin main ``` ### 2. Connect to Vercel 1. Go to [Vercel Dashboard](https://vercel.com) 2. Click "New Project" 3. Import your GitHub repository 4. Click "Deploy" ### 3. Add Environment Variables In Vercel Dashboard → **Settings** → **Environment Variables**: ``` AUTH0_DOMAIN = your-auth0-domain.auth0.com AUTH0_CLIENT_ID = your-client-id AUTH0_CLIENT_SECRET = your-client-secret NEXT_PUBLIC_APP_URL = https://your-vercel-domain.vercel.app ``` ### 4. Update Auth0 Callback URLs In Auth0 Dashboard → **Settings** → **Allowed Callback URLs**: ``` https://your-vercel-domain.vercel.app/api/auth/callback ``` ### 5. Redeploy Push a commit to trigger redeploy with env vars. --- ## 🐛 Troubleshooting ### "No access token found" **Problem:** User not authenticated **Solution:** Click "Connect Google Calendar" and complete Auth0 flow ### "Unauthorized: Access token may be expired" **Problem:** Token expired and couldn't refresh **Solution:** Disconnect and reconnect your calendar ### "Google Calendar API error" **Problem:** Calendar API not enabled **Solution:** 1. Go to [Google Cloud Console](https://console.cloud.google.com) 2. Enable **Google Calendar API** 3. Restart the app ### "Missing Auth0 environment variables" **Problem:** Env vars not set **Solution:** Add all 4 required env vars (see [Environment Variables](#5-environment-variables)) --- ## 📊 API Documentation ### GET `/api/get-events` **Purpose:** Retrieve calendar events securely via Token Vault **Request:** ```bash curl http://localhost:3000/api/get-events \ -H "Cookie: access_token=..." # Automatic from browser ``` **Response:** ```json { "success": true, "events": [ { "id": "event-id", "summary": "Team Meeting", "start": { "dateTime": "2026-04-10T10:00:00Z" }, "end": { "dateTime": "2026-04-10T11:00:00Z" }, "organizer": { "email": "organizer@example.com" } } ], "message": "Calendar events retrieved securely via Token Vault gateway" } ``` **Status Codes:** - `200 OK` - Events retrieved successfully - `401 Unauthorized` - Not authenticated or token invalid - `500 Internal Server Error` - API error ### POST `/api/auth/login` **Purpose:** Initiate OAuth login flow **Request:** ```bash GET /api/auth/login?callbackUrl=/ ``` **Response:** Redirect to Auth0 ### POST `/api/auth/callback` **Purpose:** Handle Auth0 callback and store token **Request:** Callback from Auth0 with `code` parameter **Response:** Set secure cookies, redirect to `/` ### POST `/api/auth/logout` **Purpose:** Clear authentication cookies **Request:** ```bash POST /api/auth/logout ``` **Response:** ```json { "success": true, "message": "Logged out successfully" } ``` --- ## 🏆 Hackathon Submission ### What This Demonstrates ✅ **Auth0 Token Vault Integration** — Real, production-grade implementation ✅ **Security Pattern** — AI agents can't steal credentials ✅ **Complete Code** — All 4 core files + supporting libs ✅ **Real APIs** — Not mocked, uses actual Google Calendar API ✅ **Deployment Ready** — Deploy to Vercel instantly ✅ **Extensible** — Shows how to support ANY API ### Talking Points 1. **"Why Token Vault?"** → Credentials never leave the server 2. **"How do agents use it?"** → Simple HTTP request to gateway, no auth handling 3. **"Why not put tokens in client?"** → Exposed to XSS, requires agents to handle secrets 4. **"Why HTTP-only cookies?"** → Automatic with requests, invisible to JavaScript 5. **"How does this scale?"** → One gateway endpoint per API, same security pattern ### Code Highlights - **`/api/get-events`** → Core security pattern - **`.env.local.example`** → Shows required Auth0 setup - **`ai-agent.py`** → Demonstrates agent usage - **`getCalendarEvents(token)`** → Actual Google Calendar API call --- ## 📚 Resources - [Auth0 Token Vault Docs](https://auth0.com/docs/get-started/applications) - [Google Calendar API Docs](https://developers.google.com/calendar/api) - [Next.js API Routes](https://nextjs.org/docs/app/building-your-application/routing/route-handlers) - [HTTP-Only Cookies Security](https://owasp.org/www-community/attacks/xss/index.html) --- ## 📝 License MIT — Use freely for learning, hackathons, and projects. --- ## ✨ Built for **Authorized to Act Hackathon** (April 2026) A showcase of secure, production-ready AI agent authentication patterns using Auth0 Token Vault. # Agent-password

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors