auth0-express
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAuth0 Express Integration
Auth0 Express 集成
Add authentication to Express.js web applications using express-openid-connect.
使用express-openid-connect为Express.js Web应用添加认证功能。
Prerequisites
前置条件
- Express.js application
- Auth0 account and application configured
- If you don't have Auth0 set up yet, use the skill first
auth0-quickstart
- Express.js 应用
- 已配置的Auth0账号和应用
- 若尚未设置Auth0,请先使用技能
auth0-quickstart
When NOT to Use
不适用于以下场景
- Single Page Applications - Use ,
auth0-react, orauth0-vuefor client-side authauth0-angular - Next.js applications - Use skill which handles both client and server
auth0-nextjs - Mobile applications - Use for React Native/Expo
auth0-react-native - Stateless APIs - Use JWT validation middleware instead of session-based auth
- Microservices - Use JWT validation for service-to-service auth
- 单页应用 - 客户端认证请使用、
auth0-react或auth0-vueauth0-angular - Next.js 应用 - 请使用技能,它同时支持客户端和服务端
auth0-nextjs - 移动应用 - React Native/Expo请使用
auth0-react-native - 无状态API - 请使用JWT验证中间件而非基于会话的认证
- 微服务 - 服务间认证请使用JWT验证
Quick Start Workflow
快速开始流程
1. Install SDK
1. 安装SDK
bash
npm install express-openid-connect dotenvbash
npm install express-openid-connect dotenv2. Configure Environment
2. 配置环境
For automated setup with Auth0 CLI, see Setup Guide for complete scripts.
For manual setup:
Create :
.envbash
AUTH0_SECRET=<openssl-rand-hex-32>
AUTH0_BASE_URL=http://localhost:3000
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
AUTH0_ISSUER_BASE_URL=https://your-tenant.auth0.comGenerate secret:
openssl rand -hex 32使用Auth0 CLI自动配置,请查看设置指南获取完整脚本。
手动配置:
创建文件:
.envbash
AUTH0_SECRET=<openssl-rand-hex-32>
AUTH0_BASE_URL=http://localhost:3000
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
AUTH0_ISSUER_BASE_URL=https://your-tenant.auth0.com生成密钥:
openssl rand -hex 323. Configure Auth Middleware
3. 配置认证中间件
Update your Express app ( or ):
app.jsindex.jsjavascript
require('dotenv').config();
const express = require('express');
const { auth, requiresAuth } = require('express-openid-connect');
const app = express();
// Configure Auth0 middleware
app.use(auth({
authRequired: false, // Don't require auth for all routes
auth0Logout: true, // Enable logout endpoint
secret: process.env.AUTH0_SECRET,
baseURL: process.env.AUTH0_BASE_URL,
clientID: process.env.AUTH0_CLIENT_ID,
issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL,
clientSecret: process.env.AUTH0_CLIENT_SECRET
}));
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});This automatically creates:
- - Login endpoint
/login - - Logout endpoint
/logout - - OAuth callback
/callback
更新你的Express应用(或):
app.jsindex.jsjavascript
require('dotenv').config();
const express = require('express');
const { auth, requiresAuth } = require('express-openid-connect');
const app = express();
// 配置Auth0中间件
app.use(auth({
authRequired: false, // 不为所有路由强制要求认证
auth0Logout: true, // 启用登出端点
secret: process.env.AUTH0_SECRET,
baseURL: process.env.AUTH0_BASE_URL,
clientID: process.env.AUTH0_CLIENT_ID,
issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL,
clientSecret: process.env.AUTH0_CLIENT_SECRET
}));
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});这会自动创建:
- - 登录端点
/login - - 登出端点
/logout - - OAuth回调端点
/callback
4. Add Routes
4. 添加路由
javascript
// Public route
app.get('/', (req, res) => {
res.send(req.oidc.isAuthenticated() ? 'Logged in' : 'Logged out');
});
// Protected route
app.get('/profile', requiresAuth(), (req, res) => {
res.send(`
<h1>Profile</h1>
<p>Name: ${req.oidc.user.name}</p>
<p>Email: ${req.oidc.user.email}</p>
<pre>${JSON.stringify(req.oidc.user, null, 2)}</pre>
<a href="/logout">Logout</a>
`);
});
// Login/logout links
app.get('/', (req, res) => {
res.send(`
${req.oidc.isAuthenticated() ? `
<p>Welcome, ${req.oidc.user.name}!</p>
<a href="/profile">Profile</a>
<a href="/logout">Logout</a>
` : `
<a href="/login">Login</a>
`}
`);
});javascript
// 公开路由
app.get('/', (req, res) => {
res.send(req.oidc.isAuthenticated() ? '已登录' : '未登录');
});
// 受保护路由
app.get('/profile', requiresAuth(), (req, res) => {
res.send(`
<h1>个人资料</h1>
<p>姓名: ${req.oidc.user.name}</p>
<p>邮箱: ${req.oidc.user.email}</p>
<pre>${JSON.stringify(req.oidc.user, null, 2)}</pre>
<a href="/logout">登出</a>
`);
});
// 登录/登出链接
app.get('/', (req, res) => {
res.send(`
${req.oidc.isAuthenticated() ? `
<p>欢迎, ${req.oidc.user.name}!</p>
<a href="/profile">个人资料</a>
<a href="/logout">登出</a>
` : `
<a href="/login">登录</a>
`}
`);
});5. Test Authentication
5. 测试认证功能
Start your server:
bash
node app.jsVisit and test the login flow.
http://localhost:3000启动服务器:
bash
node app.js访问并测试登录流程。
http://localhost:3000Detailed Documentation
详细文档
- Setup Guide - Automated setup scripts, environment configuration, Auth0 CLI usage
- Integration Guide - Protected routes, sessions, API integration, error handling
- API Reference - Complete middleware API, configuration options, request properties
- 设置指南 - 自动设置脚本、环境配置、Auth0 CLI使用方法
- 集成指南 - 受保护路由、会话、API集成、错误处理
- API参考 - 完整的中间件API、配置选项、请求属性
Common Mistakes
常见错误
| Mistake | Fix |
|---|---|
| Forgot to add callback URL in Auth0 Dashboard | Add |
| Missing or weak SECRET | Generate secure secret with |
| Setting authRequired: true globally | Set to false and use |
| App created as SPA type in Auth0 | Must be Regular Web Application type for server-side auth |
| Session secret exposed in code | Always use environment variables, never hardcode secrets |
| Wrong baseURL for production | Update AUTH0_BASE_URL to match your production domain |
| Not handling logout returnTo | Add your domain to Allowed Logout URLs in Auth0 Dashboard |
| 错误 | 修复方法 |
|---|---|
| 忘记在Auth0控制台添加回调URL | 将 |
| 密钥缺失或强度不足 | 使用 |
| 全局设置authRequired: true | 设置为false,并在特定路由上使用 |
| 在Auth0中创建的应用为SPA类型 | 服务端认证必须使用常规Web应用类型 |
| 会话密钥在代码中暴露 | 始终使用环境变量,切勿硬编码密钥 |
| 生产环境baseURL错误 | 更新AUTH0_BASE_URL以匹配你的生产域名 |
| 未处理登出returnTo | 在Auth0控制台将你的域名添加到允许的登出URL中 |
Related Skills
相关技能
- - Basic Auth0 setup
auth0-quickstart - - Migrate from another auth provider
auth0-migration - - Add Multi-Factor Authentication
auth0-mfa
- - Auth0基础设置
auth0-quickstart - - 从其他认证提供商迁移
auth0-migration - - 添加多因素认证
auth0-mfa
Quick Reference
快速参考
Middleware Options:
- - Require auth for all routes (default: false)
authRequired - - Enable /logout endpoint (default: false)
auth0Logout - - Session secret (required)
secret - - Application URL (required)
baseURL - - Auth0 client ID (required)
clientID - - Auth0 tenant URL (required)
issuerBaseURL
Request Properties:
- - Check if user is logged in
req.oidc.isAuthenticated() - - User profile object
req.oidc.user - - Access token for API calls
req.oidc.accessToken - - ID token
req.oidc.idToken - - Refresh token
req.oidc.refreshToken
Common Use Cases:
- Protected routes → Use middleware (see Step 4)
requiresAuth() - Check auth status →
req.oidc.isAuthenticated() - Get user info →
req.oidc.user - Call APIs → Integration Guide
中间件选项:
- - 为所有路由强制要求认证(默认:false)
authRequired - - 启用/logout端点(默认:false)
auth0Logout - - 会话密钥(必填)
secret - - 应用URL(必填)
baseURL - - Auth0客户端ID(必填)
clientID - - Auth0租户URL(必填)
issuerBaseURL
请求属性:
- - 检查用户是否已登录
req.oidc.isAuthenticated() - - 用户资料对象
req.oidc.user - - 用于API调用的访问令牌
req.oidc.accessToken - - ID令牌
req.oidc.idToken - - 刷新令牌
req.oidc.refreshToken
常见用例:
- 受保护路由 → 使用中间件(见步骤4)
requiresAuth() - 检查认证状态 →
req.oidc.isAuthenticated() - 获取用户信息 →
req.oidc.user - 调用API → 集成指南