iOS上GitHub API的身份验证错误

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

我正在使用GitHub的REST API for iOS,在使用基本身份验证时遇到了问题。我编写了以下代码来查看用户GitHub存储库:

    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的问题。我将非常感激。