4

我目前正在尝试升级我的应用程序,以根据他们的新要求通过标头而不是通过查询字符串发送 OAuth 令牌。在标头中使用 OAuth 令牌发出 GET 请求时,我的请求成功验证了有效的 access_token。但是,当尝试使用相同的令牌发布帖子时,我收到了未经授权的 401。当访问令牌放在查询字符串上时,具有相同访问令牌的这篇文章会成功。

var request = (HttpWebRequest)WebRequest.Create(yammerurl);
request.Method = "POST";
request.Headers["Authorization"] = "Bearer " + access_token;
request.Host = "www.yammer.com";
request.ContentType = "application/json;charset=utf-8";

这是我为接收未授权异常的发布设置,下面是我为成功的 GET 请求设置。同样,它们都使用相同的访问令牌,并且当访问令牌通过查询字符串传递时,这两种方法都有效。

  string url = "https://www.yammer.com/api/v1/groups.json?mine=1";
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  request.Headers["Authorization"] = "Bearer " + YammerAccessToken;
  request.Host = "www.yammer.com";

有谁知道我的发布设置是否不正确,或者我是否需要添加另一个参数?

4

1 回答 1

0

是因为您没有在第二个中指定 HTTP 动词 GET 吗?这就是我在 PHP 中完成它的方式,它工作正常......

我在我的主 php 文件中调用它...

$ymuser = yammer_user_by_email('myemail@test.com');

这个函数在我的inc文件中......

function yammer_user_by_email($email, $token = null){
    global $YAMMER_ADMIN_TOKEN;

    $user = yammer_api_get('https://www.yammer.com/api/v1/users/by_email.json?email='.$email, $YAMMER_ADMIN_TOKEN);

    return $user[0];

}

我所有的 http 调用都通过这里路由,并且管理令牌应用于标头... function yammer_api_call($url, $method = 'GET', $body = '', $token){

  if ($token == null) {
    if (!$_SESSION['yammer_token'] || !$_SESSION['yammer_token']->access_token->token) return false;
    $token = $_SESSION['yammer_token']->access_token->token;
  }

  if ($method == 'GET'){
    $opts = array('http' =>
      array(
        'method'  => $method,
        'header'  => "Host: www.yammer.com\r\n" 
            ."Authorization: Bearer " . $token . "\r\n"
      )
    );
  }else{
    $opts = array('http' =>
      array(
        'method'  => $method,
        'header'  => "Content-Type: application/x-www-form-urlencoded\r\n"
            ."Host: www.yammer.com\r\n" 
            ."Authorization: Bearer " . $token . "\r\n"
            ."Content-Length: " . strlen($body) . "\r\n",
        'content' => $body,
        'timeout' => 60
      )
    );
  }

  $context  = stream_context_create($opts);
  $resp = file_get_contents($url, false, $context);
  //print($resp);
  $resp_obj = json_decode($resp);
  return $resp_obj;

}
于 2014-01-16T19:39:18.680 回答