Безсерверный пользовательский авторизатор, запрещающий авторизацию

Я строю API с безсерверным и пользовательским авторизатором на 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 ответов

Другие вопросы по тегам