AWS API Gateway: как сгенерировать apiKey для моих пользователей и разрешить им включать его в параметр запроса? - PullRequest
0 голосов
/ 28 мая 2019

Цель: мы просто хотим, чтобы наши клиенты использовали нашу конечную точку HTTP, сначала сгенерировав ключ API, а затем передав его в параметре URI запроса для запуска лямбда-функции.

Что я пробовал: не уверен, как генерироватьapiKey программно.Решил протестировать мой apiKey, найденный в API Gateway, и написал следующий код в функции Lambda:

exports.handler = async (event, context, callback) => {
   const apikey =
      event.queryStringParameters.apikey || event.stageVariables.apikey;

  const tmp = event.methodArn.split(":");
  const apiGatewayArnTmp = tmp[5].split("/");
  const awsAccountId = tmp[4];
  const region = tmp[3];
  const restApiId = apiGatewayArnTmp[0];
  const stage = apiGatewayArnTmp[1];

  callback(null, {
      principalId: "principalId",
      policyDocument: {
          Version: "2012-10-17",
          Statement: [
              {
                  Action: "execute-api:Invoke",
                  Effect: "Allow",
                  Resource: `arn:aws:execute-api:${region}:${awsAccountId}:${restApiId}/${stage}/*/*`
              }
          ]
      },
      usageIdentifierKey: apikey
  });

  return context.succeed('Success!');
};

В API Gateway я также добавил собственный авторизатор с строкой запроса request apikey.

Когда я нажимаю test и передаю любое строковое значение для ключевой строки запроса apikey, я получаю 200OK со следующим:

Response
Response Code: 200
Latency 2607
Policy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Effect": "Allow",
      "Resource": "arn:aws:execute-api:us-west-2:2234235234:asdf3r3r/ESTestInvoke-stage/*/*"
    }
  ]
}

Когда я открываю https://s9fs7h0.execute-api.us-west-2.amazonaws.com/default/executeWSL?apikey=myAPIkeygoeshere Я все еще получаю {"message":"Forbidden"}

Где я ошибся?Я ожидал, что переход по этому URL вернет Success!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...