Nuxt.js SSR服务端API安全机制:JWT认证与权限验证实现

MeanHand +0/-0 0 0 正常 2025-12-24T07:01:19 JWT · SSR · nuxtjs

在Nuxt.js SSR应用中,API安全机制的实现是保障系统安全的关键环节。本文将深入探讨JWT认证与权限验证在服务端的完整实现方案。

JWT认证实现 首先,在plugins/jwt.js中创建认证插件:

import { defineNuxtPlugin } from '#app'
import jwt from 'jsonwebtoken'

export default defineNuxtPlugin(() => {
  return {
    provide: {
      jwt: {
        verify(token) {
          return jwt.verify(token, process.env.JWT_SECRET)
        },
        sign(payload) {
          return jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: '1h' })
        }
      }
    }
  }
})

服务端路由保护server/api/auth/login.post.js中实现登录验证:

export default defineEventHandler(async (event) => {
  const { username, password } = await readBody(event)
  
  // 验证用户凭据
  if (username === 'admin' && password === 'password') {
    const token = useNuxtApp().$jwt.sign({ username })
    return { token }
  }
  
  throw createError({ statusCode: 401, message: 'Invalid credentials' })
})

中间件验证 创建middleware/auth.js中间件:

export default defineNuxtMiddleware((event) => {
  const token = event.node.req.headers.authorization?.replace('Bearer ', '')
  
  if (!token) {
    throw createError({ statusCode: 401, message: 'Access denied' })
  }
  
  try {
    const decoded = useNuxtApp().$jwt.verify(token)
    event.context.user = decoded
  } catch (error) {
    throw createError({ statusCode: 403, message: 'Invalid token' })
  }
})

通过在nuxt.config.js中配置中间件,确保所有受保护路由都经过认证验证,从而构建起完整的SSR安全防护体系。

推广
广告位招租

讨论

0/2000
David538
David538 · 2026-01-08T10:24:58
JWT在Nuxt.js SSR中确实能解决大部分认证问题,但别忘了在服务端验证时要严格校验token过期时间,避免因前端缓存导致的安全漏洞。
Nina473
Nina473 · 2026-01-08T10:24:58
实际项目中我遇到过token被暴力破解的风险,建议配合IP限制和频率控制,比如每分钟最多3次登录尝试,防止自动化攻击。
Betty1
Betty1 · 2026-01-08T10:24:58
权限验证不能只靠JWT payload里的角色字段,服务端路由要真正做访问控制,否则前端改个role字段就能越权访问了。
BoldMike
BoldMike · 2026-01-08T10:24:58
别把所有API都用同一个中间件保护,可以按接口粒度区分权限级别,比如admin-only接口单独处理,提升整体安全等级。