【问题标题】:When using Amazon API Gateway, how do I get the API key used in the request from a Django backend?使用 Amazon API Gateway 时,如何从 Django 后端获取请求中使用的 API 密钥?
【发布时间】:2016-01-07 02:08:54
【问题描述】:

相当不言自明的标题。我在 AWS 中使用 API Gateway,需要 API 密钥才能访问用 Django 编写的后端(不使用 lambda)。我需要知道如何访问请求中使用的 API 密钥,以跟踪谁在应用级别做了什么。

【问题讨论】:

    标签: django api amazon-web-services authorization aws-api-gateway


    【解决方案1】:

    您可以使用映射模板并从 $context 变量中获取 API Key,它是身份对象内部的 apiKey 属性:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

    为您的请求创建一个映射模板并将属性包含在其中。例如,如果您想包含整个请求正文 + API 密钥,您可以这样做:

    {
      "body": $input.json('$'),
      "apiKey": "$context.identity.apiKey"
    } 
    

    【讨论】:

    • 我是 API 网关的新手。您是说我必须专门配置 API Gateway 以允许每个请求通过?例如,如果我的应用程序获取并处理表单数据,我是否需要专门配置 API Gateway 以将该表单数据传递给应用程序?在上面的示例映射中,这两个值(body 和 apiKey)是否是发送到 Django 应用程序的标头?我将如何访问它们?
    【解决方案2】:

    根据您的后端应用程序的构建方式,您可以在 HTTP 参数(路径、查询字符串或标头)或请求正文中将 API 密钥发送到您的应用程序。请阅读docs,了解如何在两个系统之间移动数据。

    谢谢, 瑞恩

    【讨论】:

      【解决方案3】:

      这就是我最终实现它的方法。在模板的顶部或底部,包括这一行。

      #set($context.requestOverride.header.x-api-key = $context.identity.apiKey)
      

      当您的后端收到此请求时,api key 将在 header x-api-key 中。

      这是一个基本的映射模板,它只转发 (json) 正文和标头。

      $input.json("$")
      #set($context.requestOverride.header.x-api-key = $context.identity.apiKey)
      

      API Gateway 使用 X-API-Key 标头,所以我希望我的后端也使用它。这样我就可以使用相同的测试命令,只是 URL 不同。

      【讨论】:

        猜你喜欢
        • 2016-12-27
        • 2019-08-20
        • 1970-01-01
        • 2020-07-01
        • 2020-03-17
        • 1970-01-01
        • 2020-06-24
        • 2021-10-04
        • 1970-01-01
        相关资源
        最近更新 更多