2

我正在尝试在 iPhone 应用程序中使用 Oauth 2.0 访问 Google+ API。为此,我正在使用 OauthConsumer 库。我得到了未经授权的 request_token 和授权码,但无法使用授权码将该 request_token 交换为 access_token。我收到错误为“invalid_request”。下面是代码片段,我是否做错了什么或缺少任何参数?

代码:

-(void)getAccessTokenWithAuthorizationCode:(NSString *)code
{

    NSURL *accessTokenURL = [NSURL     URLWithString:@"https://accounts.google.com/o/oauth2/token"];

    OAMutableURLRequest *accessRequest = [[OAMutableURLRequest alloc] initWithURL:accessTokenURL
                                                                    consumer:consumer
                                                                       token:requestToken
                                                                       realm:nil   // our service provider doesn't specify a realm
                                                           signatureProvider:nil]; // use the default method, HMAC-SHA1
    [accessRequest setHTTPMethod:@"POST"];

    OARequestParameter *authCode = [[OARequestParameter alloc] initWithName:@"code" value:code];
    OARequestParameter *redirectURI = [[OARequestParameter alloc] initWithName:@"redirect_uri" value:kRedirectURI];
    OARequestParameter *granType = [[OARequestParameter alloc] initWithName:@"grant_type" value:@"authorization_code"];

    [accessRequest setParameters:[NSArray arrayWithObjects:authCode, redirectURI, granType, nil]];

    OADataFetcher *fetcher = [[OADataFetcher alloc] init];

    [fetcher fetchDataWithRequest:accessRequest 
                     delegate:self 
            didFinishSelector:@selector(accessTokenTicket:didFinishWithData:) 
              didFailSelector:@selector(accessTokenTicket:didFailWithError:)];
} 
4

1 回答 1

1

仅供参考 - 我不熟悉 Objective-C,但希望一些 OAuth 知识可以帮助您解决这个问题。

“授权请求令牌”用于 OAuth 1.0 “授权码”用于 OAuth 2.0

我没有看到任何说 OauthConsumer 支持 OAuth 2.0

你问:“我做错了什么或缺少任何参数吗?”

我认为您缺少客户端密码,这是在 OAuth 2.0 中交换授权码以获取访问令牌所必需的。请参阅Google OAuth 2.0 文档,详细了解您需要提供什么来交换访问令牌的授权代码。

您可能需要查看适用于 Mac 的 Google 工具箱 - OAuth 2 控制器:

http://code.google.com/p/gtm-oauth2/wiki/Introduction

于 2012-06-09T20:45:18.780 回答