iOS上GitHub API的身份验证错误
我正在使用GitHub的REST API for iOS,在使用基本身份验证时遇到了问题。我编写了以下代码来查看用户GitHub存储库:iOS上GitHub API的身份验证错误,ios,api,curl,nsurlrequest,github-api,Ios,Api,Curl,Nsurlrequest,Github Api,我正在使用GitHub的REST API for iOS,在使用基本身份验证时遇到了问题。我编写了以下代码来查看用户GitHub存储库: NSString *requestString = [NSString stringWithFormat:@"https://%@:%@@api.github.com/user/repos",userName,password]; NSURL *url = [NSURL URLWithString:requestString]; NSU
NSString *requestString = [NSString stringWithFormat:@"https://%@:%@@api.github.com/user/repos",userName,password];
NSURL *url = [NSURL URLWithString:requestString];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", strData);
}];
[dataTask resume];
我得到的答复如下:
{"message":"Requires authentication","documentation_url":"https://developer.github.com/v3"}
但是,当我在终端中执行以下操作时:
curl -i GET https://userName:password@api.github.com/user/repos
我从GitHub获得了预期的结果。我不确定我的iOS应用缺少什么身份验证,因为我的
curl
语句中没有iOS代码中没有的任何内容。非常感谢您对我所遗漏内容的任何帮助。我可以看出两个可能的原因:
@
被曲解了:你可以试着把用户名和密码按NSURLSession中的某些内容似乎不喜欢URL中编码的用户名/密码(老实说,它不是很安全,因为它可以在代理日志中公开,并且在服务器端也容易出现问题),因此您必须将授权详细信息编码到HTTP头中 这对我有用-
NSString *requestString = @"https://api.github.com/user/repos";
NSURL *url = [NSURL URLWithString:requestString];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
NSData *userPasswordData = [[NSString stringWithFormat:@"%@:%@", userName, password] dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic %@", base64EncodedCredential];
NSURLSessionConfiguration *sessionConfig=[NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.HTTPAdditionalHeaders=@{@"Authorization":authString};
self.session=[NSURLSession sessionWithConfiguration:sessionConfig];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", strData);
}];
[dataTask resume];
嗨@Paulw11!有没有办法修改代码以从github获取令牌?我被困在我的一项任务上。如果您有时间,请看一下我关于GithubAPI的问题。我将非常感激。