slashDB通过POST请求访问数据库并使用API​​key产生403错误

时间:2018-04-13 13:31:40

标签: api slashdb

关于HTTP的POST方法的安全性的问题:

我创建了一个名为" MyAPP":

的用户
static int usage(const char *argv0)
{
    /* Print usage using argv0 as if it was argv[0] */
    return EXIT_SUCCESS;
}

int main(int argc, char *argv[])
{
    if (argc < 1)
        return usage("(this)");
    if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
        return usage(argv[0]);

    /* argv[0] and argv[1] are non-NULL, argc >= 2 */

然后我想发出一个POST来执行SQL Pass-thru 比如:

http:///query/InsertBestScore/Score/99/ScreenName/GollyGolly.xml?apikey = dzn8k7hj2sdgddlvymfmefh1k2ddjl05

我构建了一个查询并将其命名为&#34; InsertBestScore&#34;: 插入Gaming.Leaderboard  (ScreenName,分数)  值  (:ScreenName,:Score);

如果我使用POST方法通过POSTMAN运行:           ...然后我获得了访问权限,403:

 {
    "userdef": [
        "view",
        "create"
    ],
    "api_key": "dzn8k7hj2sdgddlvymfmefh1k2ddjl05",
    "user_id": "MyAPP",
    "name": "MyAPP",
    "creator": "admin",
    "edit": [],
    "dbdef": [
        "view",
        "create"
    ],
    "querydef": [
        "view",
        "create"
    ],
    "databases": {
        "Gaming": {
            "dbuser": "mydbuser_here",
            "dbpass": "mypass_here"
        }
    },
    "password": 

"$6$rounds=665736$x/Xp0k6Nj.5qzuM5$G.3w6Py1s.xZ83RHDU55qonNMpJe4Le8nD8PqjYKoOtgbab7T22knJPqwHspoT6BQxp.5gieLFuD0SdD9dyvi/",
        "email": "",
        "view": []
}

此外,我将从应用程序调用此POST(或PUT)请求,在我的示例中是从AWS Lambda函数中运行的Python程序。

现在,我在文档中遇到了这个:

两个参数API密钥 SlashDB还允许在此身份验证方法中使用两个参数凭据 - app id和api key。当与3Scale等API管理系统集成时,这可能会派上用场。默认情况下,标头和查询字符串参数为:

<?xml version="1.0" encoding="utf-8"?>
<SlashDB>
    <http_code>403</http_code>
    <description>Access was denied to this resource. Please log in with your username/password or resend your request with a valid API key.</description>
    <url_template>/query/InsertBestScore/Score/{Score}/ScreenName/{ScreenName}.xml</url_template>
</SlashDB>

...但是在上面的例子中,我不知道appid在哪里发挥作用。 你能告诉我如何调用SlashDB端点并传递API密钥并确保用户ID被称为MyAPP。

总而言之,文档提到: •另一个应用程序使用API​​密钥进行身份验证,该密钥随每个请求一起发送。该应用程序被识别为SlashDB用户App2,它使用数据库登录db_admin。实际上,这个应用程序可以SELECT,UPDATE,INSERT和DELETE数据。

所以我想实际上,做那个子弹中的内容:将自己标识为用户(而不是App2,我是用户MyAPP),然后使用分配给它的dbuser和dbpass来访问#34;游戏&#34;数据库中。

主意?

2 个答案:

答案 0 :(得分:1)

确保您已授予用户MyAPP权限以执行查询。 为此:

  • 以管理员身份登录,
  • 转到配置 - &gt;查询,
  • 打开您的查询定义,
  • 更新字段Execute。它接受以逗号分隔的用户ID。

enter image description here

答案 1 :(得分:0)

好的,这里确实有两个问题:

  1. 为什么拒绝访问?
  2. 什么是appid以及如何使用它。
  3. 广告。 1:请求必须清除两个授权障碍。

    第一个是SlashDB强加的,执行查询的用户必须列在查询定义屏幕的Execute字段中。这是在Configure - &gt;下完成的。查询 - &gt;查询中的“编辑”按钮。

    第二个障碍是数据库强加的。正在执行POST请求的SlashDB用户必须映射到具有对Gaming.Leaderboard表的INSERT权限的物理数据库用户。不用说,这个数据库用户必须与表所在的数据库模式相关联。

    广告。 2.要启用appid,用户api密钥必须由冒号“:”分隔的两个部分组成。第一部分将被解释为appid,第二部分将被解释为apikey。

    为此,请使用配置 - &gt;用户 - &gt;有问题的用户的“编辑”按钮。然后只需在API键的开头添加一个冒号,然后在冒号左侧输入所需的appid。应用程序必须提供两个键才能执行请求。请注意,这些键的名称(即appid)可在/etc/slashdb/slashdb.ini中配置。

    此功能背后的原因是为API管理平台提供便利,这有助于密钥管理,尤其是当API将向第三方开发人员公开时。