Auth0:托管的身份认证平台

FreeGuideOnline 最新 2026-07-03

bash npm install express express-openid-connect


```javascript
const { auth } = require('express-openid-connect');

const config = {
  authRequired: false,
  auth0Logout: true,
  secret: '一个长随机字符串',
  baseURL: 'https://your-app.com',
  clientID: '你的 Client ID',
  issuerBaseURL: 'https://你的域.auth0.com'
};

app.use(auth(config));

访问 /login 即可触发认证流程,登录成功后回调到应用,用户信息保存在 req.oidc.user 中。

深入登录流程:Authorization Code Flow

为什么选择授权码流程

对于有后端的 Web 应用,推荐使用 Authorization Code Flow(带 PKCE 增强)。流程简述:

  1. 用户点击登录,应用将用户重定向到 Auth0 的 /authorize 端点。
  2. 用户输入凭证(或通过社交登录)。
  3. Auth0 重定向回你的回调 URL,并附上一个临时的授权码
  4. 你的后端使用该授权码向 Auth0 的 /oauth/token 端点请求访问令牌ID 令牌
  5. 后端验证令牌并建立用户会话。

这种方式确保了密钥(Client Secret)不会暴露在前端,安全性最高。

单页应用专属流程

对于纯前端应用,使用 Authorization Code Flow with PKCE,无需 Client Secret。SDK 会替你处理代码挑战和验证,安全换取令牌。

保护你的 API

验证访问令牌

你可以在任何后端服务中保护 API 端点,要求请求在 Authorization 头中携带有效的 Bearer 令牌。Auth0 提供的访问令牌通常是 JWT 格式。

以 Express 为例,使用 express-jwt 中间件:

const jwt = require('express-jwt');
const jwksRsa = require('jwks-rsa');

const checkJwt = jwt({
  secret: jwksRsa.expressJwtSecret({
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: 5,
    jwksUri: `https://你的域.auth0.com/.well-known/jwks.json`
  }),
  audience: '你的 API 标识符',
  issuer: `https://你的域.auth0.com/`,
  algorithms: ['RS256']
});

app.get('/api/private', checkJwt, (req, res) => {
  res.json({ message: '受保护的数据', user: req.user });
});