如何从Angular前端向Node.js后端传递Bearer Token?
问题分析与解决方案
你当前用HttpOnly Cookie存储JWT,这种机制下前端JavaScript无法直接读取该Cookie(这是HttpOnly的安全设计目的),所以你根本不需要“获取Bearer Token”——你的后端认证逻辑是从Cookie里提取JWT,而非从请求头的Bearer Token中获取。
1. 修正Angular请求配置,自动携带Cookie
修改你的CategoriaService,在请求中启用withCredentials,浏览器就会自动把后端设置的HttpOnly Cookie发送给服务器:
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { environment } from '../../../../environments/environment'; @Injectable({ providedIn: 'root', }) export class CategoriaService { constructor(private http: HttpClient) {} private url: string = environment.apiUrl; getCategoria(): Observable<any> { return this.http.get(`${this.url}rest/getCategoria`, { withCredentials: true // 关键配置:开启后自动携带Cookie }); } }
2. 后端CORS必须允许携带凭证
如果前后端跨域,后端的CORS配置必须开启credentials,否则浏览器会拦截Cookie的发送。Node.js中用cors中间件的配置示例:
const cors = require('cors'); app.use(cors({ origin: 'http://localhost:4200', // 替换成你的前端实际域名 credentials: true // 必须设为true }));
3. 调整Secure Cookie的环境适配
你登录路由里设置了secure: true,这会让Cookie只在HTTPS连接下生效。本地开发用HTTP的话,得把这个值改成false,否则浏览器不会保存Cookie:
res.cookie("jwt", acessToken, { httpOnly: true, maxAge: maxAge, secure: process.env.NODE_ENV === 'production' // 生产环境用HTTPS才设为true });
补充说明
你的后端authMiddleware是从req.cookies["jwt"]读取Token的,完全不需要前端手动处理Bearer Token。只要前端请求带上Cookie,后端就能完成认证流程。
内容的提问来源于stack exchange,提问作者Guilherme Peixe
相关产品推荐
相关产品推荐

