Подпись с использованием временных учетных данных для проблем с запросом шлюза API

Я пытаюсь вызвать свой API-шлюз с аутентифицированными пользователями с помощью REST API. Для этого я использую: Cognito UserPool + Cognito Identity Pool + API Gateway + AWS_IAM. Авторизация + учетные данные Cognito. Из того, что я собрал, мне нужно подписать свой запрос (временные учетные данные). На основе этой темы Я хочу подписать свой запрос следующими ключами:

{
 SecretKey: '', 
 AccesKeyId: '',
 SessionKey: ''
}

Если я использую связанного пользователя из моей консоли IAM и использую соответствующий SecretKey + AccesKeyID, все работает нормально. Однако я хочу использовать роли без проверки подлинности и с проверкой подлинности из моих пулов идентификаторов для применения политик IAM на основе проверенных или не прошедших проверку подлинности пользователей. К вашему сведению: я могу вызывать аутентифицированные функции из в этой части документации.

Я создаю приложение React-Native, и из-за этого я хочу свести к минимуму собственный SDK, и я использую только AWSCognitoIdentityProvider часть. Для пользовательской обработки.

Я пытаюсь получить правильные ключи, используя этот код Objective-C:

 [[self.credentialsProvider credentials] continueWithBlock:^id(AWSTask *task) {
    if (task.error) {
      NSLog(@"Error: %@", task.error);
    }
    else {
      AWSCredentials *response = task.result;

      NSString *accessKey = response.accessKey;
      NSString *secretKey = response.secretKey;
      NSString *sessionKey = response.sessionKey;
      NSDictionary *responseData = @{
                                     @"AccessKey" : accessKey,
                                     @"SecretKey" : secretKey,
                                     @"SessionKey": sessionKey
                                     };
        }

    return nil;
  }];

Остальное я установил с помощью соответствующие документы.

Я (ошибочно?) Попытался подписать свои запросы с помощью
AccessKey, SecretKey, SessionKey, полученных от CredentialsProvider выше.

  {
     SecretKey: credentials.SecretKey, 
     AccesKeyId: credentials.AccessKey,
     SessionKey: credentials.SessionKey
   }

Подписание не выполняется из-за следующей ошибки:

{ message: 'The security token included in the request is invalid.' }

Итак, у меня возникает вопрос: какие ключи я должен использовать для подписи моих запросов для аутентифицированных пользователей, чтобы я мог применять прикрепленные политики IAM из моей установки Cognito?

Спасибо за любую помощь :)


person swennemen    schedule 08.05.2016    source источник
comment
SessionKey? Не SessionToken?   -  person Michael - sqlbot    schedule 08.05.2016


Ответы (1)


Как и Майкл - укажите sqlbot, это должен быть SessionToken вместо SessionKey. Я нашел лучшую инструкцию по как получить учетные данные от Cognito.

person Ka Hou Ieong    schedule 07.11.2016