拒绝授权的无服务器自定义授权者

时间:2017-05-12 07:42:36

标签: authorization aws-api-gateway serverless-framework

我正在使用无服务器和api-gateway上的自定义授权器构建api。当运行无服务器本地并传递有效的授权令牌时,我得到401响应。

我主要是从示例中复制了这个,授权者调用的函数是

var apiGatewayAuth = function(event, context, callback) {
    if(event.authorizationToken == 'undefined'){
      return callback(null,generatePolicy('', 'Deny', event.methodArn));
    }
    var token = validateToken(event.authorizationToken);
    if (token.error) {
      return callback(null, generatePolicy('', 'Deny', event.methodArn));
    } 
    console.log('allow',generatePolicy(token.sub, 'Allow', event.methodArn))
    return callback(null,generatePolicy(token.sub, 'Allow', event.methodArn));
};

该政策是通过

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

返回的政策类似于

{ principalId: 'test_api_user',
  policyDocument: { 
     Version: '2012-10-17',
     Statement: [ { Action: 'execute-api:Invoke',
    Effect: 'Allow',
    Resource: 'my:arn' } ]
}

我在这里显然做错了吗?

我的token.sub是我的应用程序的唯一用户名字符串,但AWS没有关于用户是谁的概念,我认为这很好。

0 个答案:

没有答案