如何使用AWS API Gateway和AWS Lambda

时间:2016-07-18 23:19:12

标签: amazon-web-services oauth-2.0 access-token aws-lambda aws-api-gateway

我已使用此tutorial设置了AWS Lambda函数。我使用另一个tutorial将AWS API Gateway与我的Lambda函数合并。 第二个教程给出了下面的代码(A),用于接受令牌的lambda函数。出于测试目的,我成功使用了Postman并传入了"允许/拒绝/未授权"在标题中访问lambda函数的不同部分。

我的问题是如何将真实令牌合并到API Gateway / AWS Lambda中的?我在评论中看到(在下面的代码块中 - A)它表示" //调用oauth提供程序,破解jwt令牌等"。我不知道该怎么做....我一直在网上搜索这个例子(因为这是人们做的最常见的事情吗?)并且未能找到一个可靠的例子。任何帮助将不胜感激!请原谅我对这个问题的了解有限。

我的最终目标是: 1)来自移动应用程序的未经身份验证的用户访问API网关端点,然后调用我的lambda函数来验证令牌。 2)如果令牌已经过验证,则会调用另一个lambda函数来执行操作。

A

exports.handler = function(event, context) {
var token = event.authorizationToken;
// Call oauth provider, crack jwt token, etc.
// In this example, the token is treated as the status for simplicity.

switch (token) {
    case 'allow':
        context.succeed(generatePolicy('user', 'Allow', event.methodArn));
        break;
    case 'deny':
        context.succeed(generatePolicy('user', 'Deny', event.methodArn));
        break;
    case 'unauthorized':
        context.fail("Unauthorized");
        break;
    default:
        context.fail("error dawg");
}
};

var generatePolicy = function(principalId, effect, resource) {
  var authResponse = {};
  authResponse.principalId = principalId;
  if (effect && resource) {
      var policyDocument = {};
      policyDocument.Version = '2012-10-17'; // default version
      policyDocument.Statement = [];
      var statementOne = {};
      statementOne.Action = 'execute-api:Invoke'; // default action
      statementOne.Effect = effect;
      statementOne.Resource = resource;
      policyDocument.Statement[0] = statementOne;
      authResponse.policyDocument = policyDocument;
  }
  return authResponse;

}

1 个答案:

答案 0 :(得分:2)

示例:

  1. 使用自编码访问令牌的示例
    Introducing custom authorizers in Amazon API GatewayAWS Compute Blog

  2. 使用不切实际的访问令牌的示例
    Enable Amazon API Gateway Custom AuthorizationAWS Documentation

  3. 使用外部授权服务器的示例
    Amazon API Gateway Custom Authorizer + OAuthAuthlete