gpt4 book ai didi

node.js - 使用来自 node.js 的凭据进行反向代理登录

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:23 25 4
gpt4 key购买 nike

我目前有一台在 Tomcat servlet 中运行 Spring 的服务器,带有 Shiro Token 系统,用于检查用户是否已经登录。它允许跨域请求。

在我可以在客户端(通常使用角度)调用的任何其他域中...

http.get('https://<my_check_login_service>', {withCredentials: true})

...只要我已经登录( token 不会过期)就返回用户信息(姓名、头像等)。

我现在有另一个系统,它是一个 Node 服务器(也为客户端提供角度服务),我想为其调用 Node 服务器并让它代理到上面的 my_check_login_service 到获取用户,在 session 对象上设置信息(使用 express),然后将用户返回给客户端。而且,通过 session 对象,允许我信任他们的连接,并允许他们根据从登录服务返回的用户的安全级别执行进一步的 api 调用。

在 node.js 路由器上我可以代理做这件事......

app.get('/checklogin', function(req, res) {
req.pipe(request.get("https://<my_check_login_service>").pipe(res);
}

...但我不知道如何将正确的凭据传递给服务。如果我这样做......

http.get('checkLogin', {withCredentials: true})

...当然,它不起作用,因为我的 login_service 的凭据没有发送到本地服务器。我怎样才能传递正确的凭据来完成这项工作?

干杯。

最佳答案

凭据很可能在 HTTP header 中,传递所有 header (来自请求和响应)以及原始请求的地址,应该可以使其工作:

app.get('/checklogin', function(req, res) {
console.dir(req.headers)
//You can inspect the headers here and pass only required values
const options = {
url: 'https://<my_check_login_service>',
headers: Object.assign(
//Tell the login service about address of original request
{'X-Forwarded-For': req.connection.remoteAddress}
req.headers)
}
req.pipe(request.get(options))
.on('response', (response) => res.set(response.headers))
.pipe(res)
}

此示例通过设置 X-Forwarded-For 传递原始地址,login_service 可能会识别...或不识别它,具体取决于配置。

关于node.js - 使用来自 node.js 的凭据进行反向代理登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com