如何从api后端到我拥有的另一个api后端进行身份验证请求?

时间:2019-02-10 21:29:22

标签: node.js

我想在各自位于单独服务器上的两个API之间发出简单的身份验证请求,我知道如何使用JSON-web-tokens或会话(从前端到后端调用)进行身份验证,这是通过将它们存储来完成的在浏览器中,但是如何在我拥有的单独的后端服务器之间进行身份验证,即从API到另一个API的身份验证?

我已经尝试过,通过使用jwt-simple库,并检查解码是否有效,然后完成了该过程,否则,我拒绝了它,但是我不想那样做,我已经尝试过护照文档,但我能找到的只是它们描述了在浏览器中存储身份验证,因为我试图使用从后端API到我拥有的另一个API的获取请求,因此无法达到我的目的试图到达这里?

1 个答案:

答案 0 :(得分:0)

我不明白问题

开始时,您必须回答以下问题:您想做什么?您有几种选择:

  1. 完全无需用户参与即可进行授权:您知道如何将服务器A上的用户连接到服务器B上的用户,并且只有服务器对其进行身份验证并说出我是Kowalsky (例如:生成JWT的其他方法。)

  2. 使用密码进行授权:服务器A要求用户输入登录名和密码,然后将此数据用于服务器B。

  3. 服务器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。