У меня есть приложение для iOS, которое загружает / выгружает на / из Amazon S3. Я бы хотел заменить Amazon S3 своим собственным облаком Minio.
Я выполнил краткое руководство здесь https://github.com/minio/minio, и у меня работает Minio на моем локальном хосте, и я могу размещать файлы с помощью s3cmd (https://docs.minio.io/docs/s3cmd-with-minio).
К сожалению, мне не удается заставить его работать из моего приложения для iOS.
Я использую AWS SDK v2.4.16, поэтому я могу изменить конечную точку и сделал ее своим локальным хостом (http://my-imac.local:9000), и я обновил свой ключ доступа и секретный ключ, но получаю сообщение об ошибке SignatureDoesNotMatch: «Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи». .
Указывая на мой локальный сервер:
AWSEndpoint *minioEndpoint = [[AWSEndpoint alloc] initWithURLString:@"http://my-imac.local:9000"];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:region
endpoint:minioEndpoint
credentialsProvider:credentialProvider];
[AWSS3 registerS3WithConfiguration:configuration forKey:s3RegionString];
Вот что я получаю на своем локальном хосте:
time = "2017-04-10T23: 36: 21Z" level = error msg = "{\" method \ ": \" PUT \ ", \" path \ ": \" / mybucket / 28AB7D6DCFC44102955EBC0AEFF6E4E2-20170407161228839-0700 / foo_28AB7D6BCEFC044A210 -20170407161228839-0700_v2.json_bin \ ", \" query \ ": \" \ ", \" header \ ": {\" Accept \ ": [\" / \ "], \" Accept-Encoding \ ": [\" gzip, deflate \ "], \" Accept-Language \ ": [\" en-us \ "], \" Авторизация \ ": [\" AWS4-HMAC-SHA256 Credential = LNTXV0YMMZ9SY7MD0ACZ / 20170410 / us-east-1 / s3 / aws4_request, SignedHeaders = content-length; content-type; host; user-agent; x-amz-date, Signature = 7b2f4172dd926ba84c7edba5c8501b328e0 "\" \ "\" \ "keep-alive \"], \ "Content-Length \": [\ "282416 \"], \ "Content-Type \": [\ "application / octet-stream \"], \ "Host \" : [\ "my-imac.local \"], \ "User-Agent \": [\ "aws-sdk-iOS / 2.4.16 iPhone-OS / 9.1 en_US \"], \ "X-Amz-Date \ ": [\" 20170410T233620Z \ "]}}" cause = "Подпись не соответствует" source = "[object-handlers.go: 472: objectAPIHandlers.PutObjectHandler ()]"
Со стороны iOS:
Заголовки запроса:
{
Authorization = "AWS4-HMAC-SHA256 Credential=LNTXV0YMMZ9SY7MD0ACZ/20170410/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;user-agent;x-amz-date, Signature=454c8bad35bdd3a15a08c9bf555fc69f1d5c0dabad78a474eabd4d844ca69aef";
"Content-Length" = 282416;
"Content-Type" = "application/octet-stream";
Host = "my-imac.local";
"User-Agent" = "aws-sdk-iOS/2.4.16 iPhone-OS/9.1 en_US";
"X-Amz-Date" = 20170410T233622Z;
}
Ответ:
2017-04-10 16:36:22.507 demo[7969:4711709] AWSiOSSDK v2.4.16 [Debug] AWSURLSessionManager.m line:566 | -[AWSURLSessionManager printHTTPHeadersForResponse:] | Response headers:
{
"Accept-Ranges" = bytes;
Connection = close;
"Content-Type" = "application/xml";
Date = "Mon, 10 Apr 2017 23:36:22 GMT";
Server = "Minio/RELEASE.2017-03-16T21-50-32Z (linux; amd64)";
"Transfer-Encoding" = Identity;
Vary = Origin;
"X-Amz-Request-Id" = 14B42D7AE5B09A2B;
}