Мы используем механизм подписи AWS V4 для вызовов конечной точки API Gateway из нашего приложения для iOS. Мы встроили идентификатор ключа доступа и секретный ключ в код, который работал нормально. Очевидно, что это небезопасный способ, и рекомендуется использовать AWS Cognito. Я хотел знать, как мы используем временный ключ доступа и секрет (и, возможно, ключ сеанса), которые мы получаем из объекта AWSCredentials в моем коде iOS на Objective-C, для выполнения безопасных запросов к нашей конечной точке шлюза API.
Мы попытались использовать временный ключ доступа и секрет, полученные от Cognito, для создания подписи V4 вместо ключа доступа и секрета учетной записи, но это не кажется правильным подходом. Метод шлюза API включен с AWS_IAM в качестве параметра авторизации.
Это ошибка, которую мы получаем:
{ status code: 403, headers {
Connection = "keep-alive";
"Content-Length" = 69;
"Content-Type" = "application/json";
Date = "Fri, 13 Jan 2017 10:26:38 GMT";
Via = "1.1 .....cloudfront.net (CloudFront)";
"X-Amz-Cf-Id" = "...";
"X-Cache" = "Error from cloudfront";
"x-amzn-ErrorType" = UnrecognizedClientException;
"x-amzn-RequestId" = "...";
} }
Используемый IdentityPoolId взят из пула удостоверений, созданного для федеративных удостоверений в AWS Cognito.
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"];
Мы используем неаутентифицированную роль, поскольку нам не нужна какая-либо форма аутентификации пользователя. И эта роль имеет следующие политики: AmazonAPIGatewayInvokeFullAccess AmazonAPIGatewayPushToCloudWatchLogs CloudFrontFullAccess AmazonCognitoDeveloperAuthenticatedIdentities AmazonAPIGatewayAdministrator CloudFrontOnlyReadOnlyAccess IAMReadOnlyAccess AmazonCognitoPowerUser
Не могли бы вы помочь здесь, как я могу использовать Cognito для создания подписей V4 или полностью обойти этот процесс.