加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Objective-C/C++ocoa进行AWS身份验证

发布时间:2020-12-16 03:22:56 所属栏目:百科 来源:网络整理
导读:好吧,这让我疯了. 我正在尝试创建一个简单的AWS S3客户端,它允许与S3进行基本交互,但似乎我做错了什么并且无法弄清楚它是什么.它可能很明显,但我没有看到它. 我的密钥是正确的并且已经过测试 – 没有尾随空格等. 问题似乎与签名有关,它不断得到’我们计算的
好吧,这让我疯了.

我正在尝试创建一个简单的AWS S3客户端,它允许与S3进行基本交互,但似乎我做错了什么并且无法弄清楚它是什么.它可能很明显,但我没有看到它.

我的密钥是正确的并且已经过测试 – 没有尾随空格等.

问题似乎与签名有关,它不断得到’我们计算的请求签名与您提供的签名不匹配.从Amazon的REST API检查您的密钥和签名方法错误.我创建了各种类别,添加了base64,HMAC SHA1生成功能,我还查看了各种在线示例,但到目前为止还没有成功.

不使用亚马逊提供的库的原因是因为它针对的是Cocoa Touch,我不想破解它以使其适用于Cocoa.

您可以在此处获取所有文件/代码的副本:https://www.dropbox.com/s/8ts9q71dz3uopxp/S3Lite.zip

然而,我关注亚马逊关于身份验证的文档,而且简单地说,一切都正确完成.

这是我如何生成签名:

-(NSString *)signRequest:(NSURLRequest *)request {
    NSMutableString *sig = [[NSMutableString alloc] init];

    // Request Method
    [sig appendFormat:@"%@n",[request HTTPMethod]];

    // Content MD5
    [sig appendFormat:@"%@n",[[request HTTPBody] MD5String]];

    // Content Type
    [sig appendFormat:@"%@n",[request valueForHTTPHeaderField:@"Content-Type"]];

    // Date
    [sig appendFormat:@"%@n",[request valueForHTTPHeaderField:@"Date"]];

    // Canonicalized Headers
    [sig appendFormat:@"%@n",@""]; // Empty for now

    // Canonicalized Resource
    [sig appendFormat:@"%@",[NSString stringWithFormat:@"/%@%@",_bucket,request.URL.path]];

    NSString *encodedString = [[[sig dataUsingEncoding:NSUTF8StringEncoding]    hmacSHA1SignatureWithKey:_secretKey] base64String];

    return [[NSString alloc] initWithFormat:@"AWS %@:%@",_accessKey,encodedString];
}

以下是您如何使用它来尝试执行简单的PUT请求.

#import "S3Lite.h"

S3Lite *aws =  [[S3Lite alloc] initWithAccessKey:@"<access key>"
                                   secretKey:@"<secret key>"
                                  bucketName:@"<bucket name>"
                                      region:kAmazonS3EUWest1Region
                                      useSSL:NO];

NSData *file = [[NSData alloc] initWithContentsOfFile:@"<path to a file>"];

[aws putObjectWithData:file inPath:@"aRandomFile.png" withContentType:nil];

任何正确方向的帮助将不胜感激.

小号

解决方法

即使您无法直接使用AWS SDK for iOS,它也是开源的,您可能会从检查请求签名代码中获得一些想法:

https://github.com/aws/aws-sdk-ios/blob/master/AWSCore/Authentication/AWSSignature.m

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读