【问题标题】:Getting Request Token From Dropbox OAuth "Invalid OAuth Request"从 Dropbox OAuth 获取请求令牌“无效的 OAuth 请求”
【发布时间】:2015-01-13 16:36:31
【问题描述】:

我正在尝试从 Dropbox oauth 获取响应数据,如 here 所述 现在我不知道为什么它一直说{"error": "Invalid OAuth request."}

这是我请求令牌的完整代码:

-(void)requestTokenSecret
{

  NSString* oauthVersion=@"1";
  NSString* oauth_signature_method=@"PLAINTEXT";


  NSString* postHeader = [NSString stringWithFormat: @"Authorization: OAuth oauth_version=\"%@\", oauth_signature_method=\"%@\", oauth_consumer_key=\"%@\", oauth_signature=\"%@&\"",oauthVersion,oauth_signature_method,APP_KEY,APP_SECRET];
  NSLog(@"URL HEADER: %@",postHeader);


  NSData* postHeaderData = [postHeader dataUsingEncoding:NSUTF8StringEncoding]; 

  NSMutableURLRequest* request= [[NSMutableURLRequest alloc]init];

  [request setURL:[NSURL URLWithString:@"https://api.dropbox.com/1/oauth/request_token"]];
  [request setHTTPMethod:@"POST"];

  [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

  [request setValue:[NSString stringWithFormat:@"%d",[postHeaderData length]] forHTTPHeaderField:@"Content-Length"];
  [request setHTTPBody:postHeaderData];

  NSURLConnection* conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
  [conn start];
  if(conn)
  {
    NSLog(@"Connected");
  }
  else
    NSLog(@"Connected");
}

【问题讨论】:

    标签: oauth dropbox dropbox-api


    【解决方案1】:

    您似乎将“授权:OAuth ...”放在 POST 请求的正文中,而不是将“OAuth ...”放在 Authorization 标头中。

    试试这个代码(未经测试,抱歉):

    NSString* oauthVersion=@"1";
    NSString* oauth_signature_method=@"PLAINTEXT";
    
    NSString* authorizationHeader = [NSString stringWithFormat: @"OAuth oauth_version=\"%@\", oauth_signature_method=\"%@\", oauth_consumer_key=\"%@\", oauth_signature=\"%@&\"",oauthVersion,oauth_signature_method,APP_KEY,APP_SECRET];
    
    NSMutableURLRequest* request= [[NSMutableURLRequest alloc]init];
    
    [request setURL:[NSURL URLWithString:@"https://api.dropbox.com/1/oauth/request_token"]];
    [request setHTTPMethod:@"POST"];
    
    [request setValue:authorizationHeader forHTTPHeaderField:@"Authorization"];
    
    NSURLConnection* conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    [conn start];
    

    另外,我强烈建议使用 OAuth 2 而不是 OAuth 1。它相当简单。

    【讨论】:

    • 跟进问题。是否可以跳过用户授权? (步骤 2 [此处])?我只使用 1 个静态帐户,如我的问题 [此处] 中所述。 [1]dropbox.com/developers/blog/20/… [2]stackoverflow.com/questions/27834922/…
    • 看起来 Stack Overflow 的问题已经得到了正确的回答。你几乎肯定不想这样做,但答案会告诉你如果你坚持的话该怎么做。
    • 方法[dbSession updateAccessToken:APP_ACCESS_TOKEN accessTokenSecret:APP_SECRET forUserId: APP_USER_EMAIL ];需要访问令牌和访问令牌秘密。当我尝试将请求令牌转换为获取访问令牌时,它显示“请求令牌尚未得到正确授权”,但我想跳过向用户显示授权页面。 (dropbox.com/developers/blog/20/… 中的第 2 步)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2012-06-22
    • 2017-03-14
    • 2014-08-29
    相关资源
    最近更新 更多