gpt4 book ai didi

ios - iOS 上 GitHub API 的身份验证错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:02 26 4
gpt4 key购买 nike

我正在使用 GitHub 的 iOS REST API,但在使用基本身份验证时遇到问题。我编写了以下代码来查看用户的 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 header 中。

这对我有用 -

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];

关于ios - iOS 上 GitHub API 的身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719291/

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