1、使用第三方庫(kù) AFNetworking進(jìn)行網(wǎng)絡(luò)請(qǐng)求。
2、阿里云函數(shù)計(jì)算簽名認(rèn)證文檔
3、文檔中添加 CanonicalizedFCHeaders 可以不用添加,CanonicalizedResource如何沒有設(shè)置Path,在末尾加入“/”就可以了。
4、主要還是 hmac-sha256 簽名認(rèn)證,在實(shí)現(xiàn)過程中轉(zhuǎn)base64的問題。
下面則是實(shí)現(xiàn)代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-604148.html
+ (AFHTTPSessionManager *)httpSessionManager:(NSString *)url{
AFHTTPSessionManager *sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil];
[sessionManager.requestSerializer setValue:[YTDWindingCalculatorHttp aliSignature:sessionManager] forHTTPHeaderField:@"Authorization"];
return sessionManager;
}
+ (NSString *)aliSignature:(AFHTTPSessionManager *)sessionManager{
NSString *accessKeyID = @"xxxxxx";
NSString *accessKeySecret = @"xxxx";
NSString *authorization = [NSString stringWithFormat:@"FC %@:",accessKeyID];
NSMutableArray *signatureArray = [NSMutableArray array];
[signatureArray addObject:@"POST"];
[signatureArray addObject:@""];
[signatureArray addObject:@"application/json"];
NSString *date = [YTDWindingCalculatorHttp rfc1123String];
[signatureArray addObject:date];
[signatureArray addObject:@"/\n"];
//請(qǐng)求頭添加content-type 和 date
[sessionManager.requestSerializer setValue:sessionManager.responseSerializer.acceptableContentTypes.allObjects.firstObject forHTTPHeaderField:@"content-type"];
[sessionManager.requestSerializer setValue:date forHTTPHeaderField:@"date"];
NSString *signature = [signatureArray componentsJoinedByString:@"\n"];
signature = [YTDWindingCalculatorHttp hmac:signature withKey:accessKeySecret];
authorization = [NSString stringWithFormat:@"%@%@",authorization,signature];
return authorization;
}
+ (NSString *)hmac:(NSString *)content withKey:(NSString *)secret{
const char *cKey = [secret cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [content cStringUsingEncoding:NSUTF8StringEncoding];// 有可能有中文 所以用NSUTF8StringEncoding -> NSASCIIStringEncoding
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];
NSData *base64Data = [HMACData base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
return [[NSString alloc] initWithData:base64Data encoding:NSUTF8StringEncoding];
}
+ (NSString *)rfc1123String{
time_t date = (time_t)[[NSDate date] timeIntervalSince1970];
struct tm timeinfo;
gmtime_r(&date, &timeinfo);
char buffer[32];
size_t ret = strftime_l(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S GMT", &timeinfo, NULL);
if (ret) {
return @(buffer);
} else {
return nil;
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-604148.html
到了這里,關(guān)于阿里云函數(shù)計(jì)算簽名認(rèn)證(iOS實(shí)現(xiàn)細(xì)節(jié)備注)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!