Linkedin API Error Invalid Signature in iPhone Starter Kit

↘锁芯ラ 提交于 2020-01-03 06:41:07

问题


I've tried to run the OAuthStarterKit xcode project out of the box, entered the correct api key/secret and oauth user token/secret. When I get to authorizing with this code:

    OAMutableURLRequest *request = 
        [[[OAMutableURLRequest alloc] initWithURL:requestTokenURL
                                         consumer: self.consumer
                                            token: self.requestToken   
                                         callback:linkedInCallbackURL
                                signatureProvider:sha] autorelease];

It returns the error "signature_invalid", which seems to indicate an incorrect signature. the clear text and secret have a mix of upper and lower case chars, I'm not sure that that should make a difference.

If I use

requestTokenURLString = @"https://api.linkedin.com/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress";

It returns invalid sig... but if I use a basic permissions call

requestTokenURLString = @"https://api.linkedin.com/uas/oauth/requestToken;

It works fine, but it means I only have basic profile permissions, where I need things like the email address.

Entering all of the same data in the test console seems to work fine here:

https://developer.linkedin.com/oauth-test-console

Anyone know what I should be doing, thinking, or where I should be looking? Further log info:

oauth_problem=signature_invalid
oauth_problem_advice=com.linkedin.security.auth.pub.LoginDeniedInvalidAuthTokenException while obtaining request token for: POST https://api.linkedin.com/uas/oauth/requestToken/oauth_callback:hdlinked://linkedin/oauth 
oauth_consumer_key: XXX
oauth_nonce
oauth_signature_method: 3DHMACSHA1

2012-09-04 23:36:07.054 OAuthStarterKit[31952:c07] secret: TIDi9XXXXXXX
2012-09-04 23:36:07.054 OAuthStarterKit[31952:c07] base64EncodedResult: JXW6ZWUpXv7ba98o2hcUXodDhmg=

I'm using the code sample from here https://github.com/synedra/LinkedIn-OAuth-Sample-Client

Edit: Will be trying to get to the bottom of this tomorrow and answer my own question if no one beats me to it.


回答1:


After much wrangling with the Linkedin API Beast, I found the issue to be in the way things are encoded, a long story, in OAuthLoginView.m in method 'requestTokenFromProvider' I needed to include the param 'scope' with the relevant permissions in a OARequestParameter object.

(based off the github repo -> https://github.com/synedra/LinkedIn-OAuth-Sample-Client)

After that, wherever you're making your api call, (in OAuthStarterKit for example) like in ProfileTabView::profileApiCall you can fire off URL posts like this: http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry)"]; or if you need their email address, it appears (as long as you've got permission to access email, you can grab that too as simply as this:

NSURL *url = [NSURL URLWithString:@"http://api.linkedin.com/v1/people/~:(id,first-name,last-name,industry,email-address)"];

See the code for using a OARequestParameter in the URL request below...

- (void)requestTokenFromProvider
{
    OAMutableURLRequest *request = 
            [[[OAMutableURLRequest alloc] initWithURL:requestTokenURL
                                             consumer:self.consumer
                                                token:nil   
                                             callback:linkedInCallbackURL
                                    signatureProvider:nil] autorelease];

    [request setHTTPMethod:@"POST"];

    OARequestParameter * scopeParameter=[OARequestParameter requestParameter:@"scope" value:@"r_fullprofile r_contactinfo r_emailaddress"];

    [request setParameters:[NSArray arrayWithObject:scopeParameter]];

    OADataFetcher *fetcher = [[[OADataFetcher alloc] init] autorelease];
    [fetcher fetchDataWithRequest:request
                         delegate:self
                didFinishSelector:@selector(requestTokenResult:didFinish:)
                  didFailSelector:@selector(requestTokenResult:didFail:)];    
}

And for a more in depth short cut to using linkedin's API I'll keep some quicktips on my blog here ->http://techrantnz.blogspot.com.au/2012/09/the-linkedin-api-with-oauthstarterkit.html

If you wish to check things are working, check the method which is called if it succeeds

- (void)profileApiCallResult:(OAServiceTicket *)ticket didFinish:(NSData *)data

If you output the response body you might see something like:

2012-09-05 21:40:55.109 OAuthStarterKit[12244:c07] profile: {
    emailAddress = "[my email]@gmail.com";
    firstName = Dave;
    id = XXXXXX;
    industry = "Information Technology and Services";
    lastName = "XXXXXXXX";
}


来源:https://stackoverflow.com/questions/12265035/linkedin-api-error-invalid-signature-in-iphone-starter-kit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!