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

问题描述:

我目前有一个服务器在Tomcat servlet中使用Shiro令牌系统运行Spring,以检查用户是否已经登录。它允许跨域请求。使用来自node.js的凭据进行反向代理登录

在客户端上我可以在任何其他域(一般使用角度)调用...

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

...只要我已经登录(令牌未过期)返回用户信息(名称,头像等)。

我还有一个系统,现在是一个节点服务器(也煮好的角度为客户端),为此,我想打电话给节点服务器,并将它代理了上述my_check_login_service来获取用户,在session对象上设置信息(使用express),然后将用户返回给客户端。而且,通过会话对象,允许我信任它们的连接并允许它们根据从登录服务返回的用户的安全级别执行更多的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头中,(都来自请求和响应)使所有报头,与原始请求的地址,应使其工作:

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-Forlogin_service可能会识别它或不依赖于配置。

+0

是的!谢谢!我不完全确定它会起作用,因为我现在意识到我可能需要一个通配符证书才能使它适用于我。但是,现在我得到了“错误:主机名/ IP与证书的altnames不匹配:”。我假设通配符证书将解决此问题。当我摆脱它时,会更新这个。 – crowmagnumb

+0

'login_service'也检查客户端IP地址,所以代理应该通过它。 我将其添加到答案 – DarkKnight

+0

可悲的是,这是行不通的。添加标头至少让服务器知道一些信息,但不会传递登录所需的安全令牌。我认为我想做的事情是不可能的,我只需要实施OAuth系统。如果在赏金到期之前我没有其他答案,我肯定会给你。谢谢。 :) – crowmagnumb