【问题标题】:Hide an API key (in an environment variable perhaps?) when using Angular使用 Angular 时隐藏 API 密钥(可能在环境变量中?)
【发布时间】:2016-10-12 05:59:35
【问题描述】:

我正在运行一个带有 Node/Express 后端的小型 Angular 应用程序。

在我的一个 Angular 工厂(即客户端)中,我向 Github 发出 $http 请求以返回用户信息。但是,执行此操作需要 Github 生成的密钥(应保密)。

我知道我不能在客户端使用 process.env.XYZ。我想知道如何才能将此 api 密钥保密?我是否必须在后端提出请求?如果是,如何将返回的 Github 数据传输到前端?

对不起,如果这看起来很简单,但我是一个相对新手,所以任何带有代码示例的明确回复将不胜感激。谢谢

【问题讨论】:

    标签: javascript angularjs node.js environment-variables information-hiding


    【解决方案1】:

    不幸的是,您必须在后端代理请求以保密。 (我假设您需要一些通过 https://api.github.com/users/rsp?callback=foo 等未经身份验证的请求无法获得的用户数据,因为否则您首先不需要使用 API 密钥 - 但您没有具体说明您需要这样做这只是我的猜测)。

    您可以这样做:在您的后端,您可以为您的前端添加一条新路由,以获取信息。它可以做任何您需要的事情 - 使用或不使用任何 API 密钥、验证请求、在返回客户端之前处理响应等。

    例子:

    var app = require('express')();
    
    app.get('/github-user/:user', function (req, res) {
        getUser(req.params.user, function (err, data) {
            if (err) res.json({error: "Some error"});
            else res.json(data);
        });
    });
    
    function getUser(user, callback) {
        // a stub function that should do something more
        if (!user) callback("Error");
        else callback(null, {user:user, name:"The user "+user});
    }
    
    app.listen(3000, function () {
      console.log('Listening on port 3000');
    });
    

    在此示例中,您可以在以下位置获取用户信息:

    函数getUser 应该向 GitHub 发出实际请求,在调用它之前,如果那确实是发出请求的前端,则可以进行更改,例如通过检查“Referer”标头或其他内容,验证输入等。

    现在,如果您只需要公共信息,那么您可以使用像这样的公共 JSON-P API - 一个使用 jQuery 简化事情的示例:

    var user = prompt("User name:");
    var req = $.getJSON('https://api.github.com/users/'+user);
    req.then(function (data) {
      console.log(data);
    });
    

    DEMO

    【讨论】:

    • 感谢您的回复 - 我只是以我的名义提取存储库,所以也许我根本不需要 API 密钥!我有一个模糊的想法,密钥意味着可以发出更多请求。但那我可能错了。无论哪种方式,我都会非常感谢你的榜样!
    • @gwpmad 你说得对,可以通过经过身份验证的请求发出更多请求 - 在这种情况下,您需要在后端代理您的请求以隐藏您的密钥。
    • 非常感谢。这看起来像是要走的路。我会尝试一下,使用 Node 中的 https 库
    • 设法使用顶部示例中的原理使其工作,然后在我的 Angular 工厂上使用 $http 来调用后端端点。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 2021-01-08
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2019-10-20
    • 2021-04-30
    相关资源
    最近更新 更多