OP 你是对的,确实不应该将后台服务的 token 直接暴露给浏览器。
感觉你们团队也在摸索前后端分离和微服务...
你可能有点混淆了 Authorization 和 long term token;
拿 jwt 最佳实践来说,Authorization 中应该传登录行为产生的 access_token ( jwt ),一般过期时限为 15~60 分钟;具体步骤参见 @
libook 41 楼。
long term token 一般是用在 Server to Server 通信时的简单校验; 如下图中 gateway 和 Service 之间。
所以一般微服务框架中会存在一个 API gateway 的角色,用来向前端返回和校验 jwt ;
同时充当反向代理,与后台服务进行交互,如果后台服务也是暴露在公网的情况下,出于安全考虑就会用到 long term token;
一图胜千言,
当然在实际的项目中,还是根据自己的需要,可以选择对应的云服务或者自己简单实现一个;
我自己 Next.js 项目中的样例:
```
// src/pages/api/v1/[...param].js
import axios from 'axios';
export default async (req, res) => {
const instance = axios.create({
baseURL: process.env.LC_API_BASE_URL,
headers: {
'token': process.env.LC_API_TOKEN,
'Content-Type': 'application/json',
}
});
try {
var response;
if (req.method === "GET") {
response = await instance.get(req.url);
}
else if (req.method === "POST") {
response = await
instance.post(req.url, req.body);
}
else if (req.method === "PUT") {
response = await instance.put(req.url, req.body);
}
res.status(200).json(response.data)
} catch (err) {
var response = err.response;
res.status(response.status).json(response.data);
}
}
```