我跟随着这些由本·阿瓦德( Ben )视频激励的流程:NIQ-R4 https://www.youtube.com/watch?v=25GS0MLT8JU。
一般模式是内存中的访问令牌,刷新令牌为httponly cookie*。这看起来非常安全和开发友好。
但是,由于我的节点前端和api后端都是文档化的:在SSR期间,我希望使用到后端的本地连接,而不是通过DNS。默认情况下,这是一个桥接网络。这带来了一个问题。由于后端的内部uri是http://backend,而不是http://localhost:8000 (或生产中的DNS名称),所以cookie并不适用于该域,尽管它实际上是与我们获得的cookie相同的应用程序。
那么:什么是最好的解决方案,我如何实现它?
解决办法的想法:
发布于 2022-07-25 01:29:48
您可以使用Nginx来解决这个问题,因为当向后端服务器发送请求时,前端的头将包含一个用于验证的cookie,您可以将每个服务器绑定到主机上的不同端口,然后在域控制面板上添加一个CNAME记录,将发送给(作为) api.mydomain.com的所有请求定向到Nginx配置中的mydomain.com,然后在Nginx配置中这样做。
Nginx Config
server {
server_name mydomain.com;
listen 80;
location '/' {
proxy_pass 'http://localhost:8000/';
}
}
server {
listen 80;
server_name api.mydomain.com;
location '/' {
proxy_pass 'http://localhost:7000/';
}
}然后,您可以使用svelte externalFetch更改服务器端的路径,因此当请求到达服务器时,您可以使用本地主机URL重写它,而不是获取指定的URL,如下所示:
src/hooks.ts
export async function externalFetch(request) {
if (request.url.includes('api.mydomain.com')) {
const localPath = new URL(request.url.pathname, 'http://localhost:7000')
request = new Request(localPath.href, request);
}
}https://stackoverflow.com/questions/73043804
复制相似问题