You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Next.js与.NET后端,如何在服务端使用本地存储的Access Token取数?

解决Next.js服务端取数时获取access_token的问题

方案1:将access_token存储到HttpOnly Cookie中(推荐)

这是最通用且安全的解决方式,Cookie会自动在客户端与服务端的请求中携带,既满足服务端取数的需求,又能避免XSS攻击风险。

  • 后端配置(.NET):
    认证成功后,把access_token写入带HttpOnly、Secure属性的Cookie中,示例代码:

    var cookieOptions = new CookieOptions
    {
        HttpOnly = true,
        Secure = true, // 生产环境开启,仅HTTPS下有效
        SameSite = SameSiteMode.Strict,
        Expires = DateTime.UtcNow.AddHours(1) // 与token过期时间匹配
    };
    Response.Cookies.Append("access_token", accessToken, cookieOptions);
    
  • Next.js服务端取数:
    在服务端组件、API路由或Server Actions中,通过Cookie解析出token,示例:

    import { cookies } from 'next/headers';
    
    async function fetchDataFromDotnet() {
      const cookieStore = cookies();
      const accessToken = cookieStore.get('access_token')?.value;
      if (!accessToken) {
        throw new Error('未获取到认证信息');
      }
      const res = await fetch('https://your-dotnet-api.com/data', {
        headers: {
          Authorization: `Bearer ${accessToken}`
        }
      });
      return res.json();
    }
    

方案2:客户端传递token到Next.js API路由

如果暂时无法修改Cookie存储逻辑,可以通过客户端将token传递给自定义的Next.js API路由,再由API路由中转调用.NET后端。

  • 客户端组件调用API路由:

    async function fetchData() {
      const accessToken = localStorage.getItem('access_token');
      const res = await fetch('/api/fetch-data', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          Authorization: `Bearer ${accessToken}`
        }
      });
      return res.json();
    }
    
  • Next.js API路由(/pages/api/fetch-data.js):

    export default async function handler(req, res) {
      const authHeader = req.headers.authorization;
      if (!authHeader) {
        return res.status(401).json({ error: '未授权' });
      }
      const dotnetRes = await fetch('https://your-dotnet-api.com/data', {
        headers: {
          Authorization: authHeader
        }
      });
      const data = await dotnetRes.json();
      res.status(200).json(data);
    }
    

方案3:使用Next.js Server Actions(App Router)

如果采用Next.js App Router,可以直接用Server Actions在服务端执行数据请求,自动获取Cookie中的token(需配合方案1的Cookie存储逻辑)。

  • 定义Server Action:

    'use server';
    
    import { cookies } from 'next/headers';
    
    export async function fetchDotnetData() {
      const accessToken = cookies().get('access_token')?.value;
      if (!accessToken) {
        throw new Error('请先登录');
      }
      const res = await fetch('https://your-dotnet-api.com/data', {
        headers: {
          Authorization: `Bearer ${accessToken}`
        },
        cache: 'no-store'
      });
      if (!res.ok) {
        throw new Error('数据请求失败');
      }
      return res.json();
    }
    
  • 客户端组件调用:

    import { fetchDotnetData } from './actions';
    import { useState } from 'react';
    
    export default function ClientComponent() {
      const [data, setData] = useState(null);
    
      const loadData = async () => {
        const result = await fetchDotnetData();
        setData(result);
      };
    
      return (
        <div>
          <button onClick={loadData}>加载数据</button>
          {data && <pre>{JSON.stringify(data, null, 2)}</pre>}
        </div>
      );
    }
    

内容的提问来源于stack exchange,提问作者marcos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:13:11