针对LinkedIn API的OAuth不断返回401,这是什么原因造成的?
我正在使用AFNetworking,AFOAuth1Client和AFLinkedInOAuth1Client从LinkedIn的API中获取OAuth令牌。这一切都很好。针对LinkedIn API的OAuth不断返回401,这是什么原因造成的?
当我使用getPath拨打电话到v1/people/~
时,我一直收到401。
如果我从我的代码中将所有相同的值推入LinkedIn控制台,生成的链接将为我提供我之后的基本配置文件。
什么是造成401?我有一种感觉,它是AFNetworking或我的配置。
此外,您是否对如何诊断潜在问题有任何建议?
下面
+ (JJLinkedInClient *)sharedInstance {
DEFINE_SHARED_INSTANCE_USING_BLOCK(^{
return [[self alloc] init];
});
}
- (id)init {
if ((self = [super init])) {
_client = [[AFLinkedInOAuth1Client alloc] initWithBaseURL:[NSURL URLWithString:kJJLinkedInAPIBaseURLString]
key:@"XXXXXXXX"
secret:@"YYYYYYYY"];
// [_client registerHTTPOperationClass:[AFJSONRequestOperation class]];
[_client registerHTTPOperationClass:[AFHTTPRequestOperation class]];
// [_client setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}
- (void)authorize:(void(^)())success {
__block JJLinkedInClient *weakSelf = self;
[self.client authorizeUsingOAuthWithRequestTokenPath:@"uas/oauth/requestToken"
userAuthorizationPath:@"uas/oauth/authorize"
callbackURL:[NSURL URLWithString:@"XXXXXXX://linkedin-auth-success"]
accessTokenPath:@"uas/oauth/accessToken"
accessMethod:@"POST"
success:^(AFOAuth1Token *accessToken) {
NSLog(@"Success: %@", accessToken);
[weakSelf getProfile];
success();
} failure:^(NSError *error) {
NSLog(@"Error: %@", error);
}];
}
- (void)getProfile {
[self.client getPath:@"v1/people/~"
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
问题代码是在AFPercentEscapedQueryStringPairMemberFromStringWithEncoding功能,内部AFOAuth1Client。它不需要跳过波浪号,它需要跳过逗号。
虽然这是一个静态函数,但我不认为我可以在AFLinkedInOAuth1Client中覆盖它。我会跟进@mattt,看看他说什么。现在你可以改变它到这个,让它工作:
static NSString * AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
static NSString * const kAFCharactersToBeEscaped = @":/?&=;[email protected]#$(),";
static NSString * const kAFCharactersToLeaveUnescaped = @"[].~";
// static NSString * const kAFCharactersToBeEscaped = @":/?&=;[email protected]#$()~";
// static NSString * const kAFCharactersToLeaveUnescaped = @"[].";
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kAFCharactersToLeaveUnescaped, (__bridge CFStringRef)kAFCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding));
}
fyi:https://github.com/AFNetworking/AFOAuth1Client/issues/24 – pj4533 2013-02-19 18:46:16
你明星。感谢您查看这个。 – 2013-02-19 20:55:15
请张贴您的代码。 – 2013-02-18 03:06:27
我写了AFLinkedInOAuth1Client子类(https://github.com/pj4533/AFLinkedInOAuth1Client),并且一直在调试。到目前为止没有运气。我已经尝试过的事情:1)删除AFNetworking添加的默认标题2)使用http进行API调用,vs https进行宣誓3)尝试了一个没有'〜'的调用,认为使用url编码有点愚蠢。这些工作都没有。 – pj4533 2013-02-19 18:03:31
我试过1和2.然后我开始想,也许这是一个查询字符串与头部方法。 – 2013-02-19 20:55:58