针对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); 
       }];  
} 
+0

请张贴您的代码。 – 2013-02-18 03:06:27

+2

我写了AFLinkedInOAuth1Client子类(https://github.com/pj4533/AFLinkedInOAuth1Client),并且一直在调试。到目前为止没有运气。我已经尝试过的事情:1)删除AFNetworking添加的默认标题2)使用http进行API调用,vs https进行宣誓3)尝试了一个没有'〜'的调用,认为使用url编码有点愚蠢。这些工作都没有。 – pj4533 2013-02-19 18:03:31

+0

我试过1和2.然后我开始想,也许这是一个查询字符串与头部方法。 – 2013-02-19 20:55:58

问题代码是在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)); 
} 
+0

fyi:https://github.com/AFNetworking/AFOAuth1Client/issues/24 – pj4533 2013-02-19 18:46:16

+0

你明星。感谢您查看这个。 – 2013-02-19 20:55:15