gpt4 book ai didi

iphone - 通过objective-c从azure表生成身份验证 header

转载 作者:行者123 更新时间:2023-12-03 20:15:25 24 4
gpt4 key购买 nike

我正在从 iCloud 获取数据,为此我需要生成 header (Azure 表存储)。

我使用了下面的代码,它正在生成 header 。但是当我在项目中使用这些 header 时,它显示“确保授权 header 的值正确形成,包括签名。”

我用谷歌搜索了很多,尝试了很多代码,但没有成功。

任何人都可以帮我解决这段代码中出错的地方吗?

-(id)generat
{
NSString *messageToSign = [NSString stringWithFormat:@"%@/%@/%@", dateString,AZURE_ACCOUNT_NAME, tableName];

NSString *key = @"asasasasasasasasasasasasasasasasasasasasas==";

const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];

const char *cData = [messageToSign cStringUsingEncoding:NSUTF8StringEncoding];

unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];

CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];

NSString *hash = [Base64 encode:HMAC];

NSLog(@"Encoded hash: %@", hash);

NSURL *url=[NSURL URLWithString: @"http://my url"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request addValue:[NSString stringWithFormat:@"SharedKeyLite %@:%@",AZURE_ACCOUNT_NAME, hash] forHTTPHeaderField:@"Authorization"];

[request addValue:dateString forHTTPHeaderField:@"x-ms-date"];

[request addValue:@"application/atom+xml, application/xml"forHTTPHeaderField:@"Accept"];

[request addValue:@"UTF-8" forHTTPHeaderField:@"Accept-Charset"];

NSLog(@"Headers: %@", [request allHTTPHeaderFields]);

NSLog(@"URL: %@", [[request URL] absoluteString]);
return request;
}

-(NSString*)rfc1123String:(NSDate *)date
{
static NSDateFormatter *df = nil;
if(df == nil)
{
df = [[NSDateFormatter alloc] init];
df.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
df.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
}
return [df stringFromDate:date];
}

最佳答案

看起来您可能缺少换行符:

NSString *messageToSign = [NSString stringWithFormat:@"%@/%@/%@", dateString,AZURE_ACCOUNT_NAME, tableName];

我不了解 Objective-C,但我希望格式为 @"%@\n/%@/%@" (如果这就是字符串文字中的换行符的工作方式)这种编程语言)。

另外,我认为您需要这两个 header :

DataServiceVersion:1.0;NetFx
MaxDataServiceVersion:1.0;NetFx

编辑:我发现这些 header 可能存在于代码的另一部分中。您可能还需要 x-ms-version header (也可能出现在代码的其他位置)。 /编辑

出于良心,我不能指出将存储 key 放在客户端(例如手机)上是一个坏主意。任何获得您的应用程序的人都可以提取 key 并使用它来删除您的所有数据、上传他们的私有(private) DVD 收藏等。您的存储 key 是一个 secret ,因此永远不应该分发给客户。

关于iphone - 通过objective-c从azure表生成身份验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com