【问题标题】:How to Add API Key to Usage Plan in AWS API Getaway如何在 AWS API Gateway 中将 API 密钥添加到使用计划
【发布时间】:2021-10-08 15:14:27
【问题描述】:

我在创建与 AWS API Getaway 中的 使用计划 关联的 API 密钥 时遇到问题(使用适用于 node.js 的 AWS 开发工具包)。

在 AWS 控制台中,您可以通过此按钮将 API 密钥附加到使用计划:

但是我在AWS SDK documentation中找不到类似的功能

【问题讨论】:

    标签: aws-sdk aws-api-gateway aws-sdk-nodejs


    【解决方案1】:

    这段代码很神奇:

    var params = {
      keyId: 'STRING_VALUE', /* required */
      keyType: 'STRING_VALUE', /* required */
      usagePlanId: 'STRING_VALUE' /* required */
    };
    apigateway.createUsagePlanKey(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });
    

    我缺少的是 keyType 必须是 "API_KEY"

    【讨论】:

    • 这要求您首先使用其他 API 调用创建一个 API 密钥,然后获取密钥 ID,然后进行此调用以将其绑定到使用计划。一种更无缝的编程技术是在一次 API 调用中完成所有这些工作。也许 ImportApiKeyCommand 可以完成。
    【解决方案2】:

    这是创建 API 密钥并将其分配给使用计划的完整示例。

    async function createApiKey(apikey_name, usage_plan="free") {
    
        const usage_plans = {
            free: "kotc0f", // usage plan IDs
            basic: "ju5fea"
        };
    
        if (!usage_plan || !(usage_plan in usage_plans)) {
            console.log(usage_plan + " usage plan does not exist");
            return false;
        }
    
        var params = {
            name: apikey_name,
            description: "Created via API on " + (new Date).toISOString(),
            enabled: true,
            generateDistinctId: true
        };
        
        let api_key = await new Promise((resolve) => { 
            apigateway.createApiKey(params, function (err, data) {
                if (err) {
                    console.log("ERROR", err, err.stack); // an error occurred
                    resolve(false);
                }
                else {
                    resolve(data);
                }
            });
        });
    
        if (!api_key) return false;
    
        params = {
            keyId: api_key.id,
            keyType: "API_KEY",
            usagePlanId: usage_plans[usage_plan]
        };
    
        await new Promise((resolve) => {
            apigateway.createUsagePlanKey(params, function(err, data) {
                if (err) {
                    console.log(err, err.stack); // an error occurred
                    resolve(false);
                }
                else {
                    resolve(data);
                }
            });
        });
    
        return api_key;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2019-01-07
      • 1970-01-01
      • 2020-10-09
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多