我想在各自位于单独服务器上的两个API之间发出简单的身份验证请求,我知道如何使用JSON-web-tokens或会话(从前端到后端调用)进行身份验证,这是通过将它们存储来完成的在浏览器中,但是如何在我拥有的单独的后端服务器之间进行身份验证,即从API到另一个API的身份验证?
我已经尝试过,通过使用jwt-simple库,并检查解码是否有效,然后完成了该过程,否则,我拒绝了它,但是我不想那样做,我已经尝试过护照文档,但我能找到的只是它们描述了在浏览器中存储身份验证,因为我试图使用从后端API到我拥有的另一个API的获取请求,因此无法达到我的目的试图到达这里?
答案 0 :(得分:0)
我不明白问题
开始时,您必须回答以下问题:您想做什么?您有几种选择:
完全无需用户参与即可进行授权:您知道如何将服务器A上的用户连接到服务器B上的用户,并且只有服务器对其进行身份验证并说出我是Kowalsky (例如:生成JWT的其他方法。)
使用密码进行授权:服务器A要求用户输入登录名和密码,然后将此数据用于服务器B。
服务器A在服务器B上发回要授权的用户,并将数据转发回服务器A。(例如:OAuth2)
编辑:
添加1.假设您已授权使用JWT,并且知道如何为第二台服务器生成它,所以:
服务器A知道如何为服务器B生成JWT并做到这一点。
您应该使用允许您执行HTTP请求的库,或者更好地使用REST client
,例如Google node-rest-client的1条结果。
以与前端客户端中非常相似的方式,构建查询并将其发送。
const getServerBTokenForUser = function(userData) {
return 'Generated JWT token';
}
const Client = require('node-rest-client').Client;
// direct way
let client = new Client();
var args = {
path: { "id": 120, "arg1": "hello", "arg2": "world" },
headers: {'Authorization': 'Bearer '+getServerBTokenForUser(userData) }
};
client.get("http://remote.site/rest/json/${id}/method?arg1=${arg1}&arg2=${arg2}", args,
function (data, response) {
// parsed response body as js object
console.log(data);
// raw response
console.log(response);
});
这是最快的方法,尽管不是最好的方法,因为它会创建严格的依赖关系。 最好在服务器B上添加一种方法,在该方法中将对其他服务器进行授权(第二种授权方法,例如IP或加密数据)并为指定用户获取JWT。