php中的Oauth2.0服务器实现非常简单 - 使用access_token和POST

时间:2014-11-11 20:46:08

标签: php post oauth-2.0

我正在构建一个小API,并希望使用oAuth2.0进行登录和令牌处理。

我已按照此分步指南开始使用:https://bshaffer.github.io/oauth2-server-php-docs/cookbook/

现在一切正常我可以通过上面的链接指南向token.php发送帖子请求来获取我的access_token

//GET TOKEN
$params = array(
  "client_id" => "testclient",
  "client_secret" => "testpass",
  "grant_type" => "client_credentials");

$test=curl_req($pageURL."/api/v1/"."token.php", $params, "POST");

echo "<pre>";
print_r($test);

如预期的那样输出:

stdClass Object
(
    [access_token] => b53a01a66d20760a8afef05bf36951eeba6b886d
    [expires_in] => 3600
    [token_type] => Bearer
    [scope] => 
)

现在我有了令牌,想要对resource.php做一个请求,如上面的示例链接所示。但我希望使用POST,而不是GET,就像上面的分步指南链接一样。

是否可以通过access_token验证POST,如果是,如何验证?

2 个答案:

答案 0 :(得分:2)

示例中的命令是:

curl http://localhost/resource.php -d 'access_token=YOUR_TOKEN'

实际上发出了一个POST,因为如果&#34; -d&#34;那么CURL将恢复为HTTP POST。提供了标志,请参阅&#34; -d&#34;在http://curl.haxx.se/docs/manpage.html

一般情况下,如果以任何标准化方式发送,OAuth服务器将能够接收到令牌,因此a)在&#34; access_token&#34; POST参数,b)在&#34; access_token&#34;查询参数(GET)或c)在&#34;授权:承载&#34;头。最后一个选项实际上是首选方法,因为它可以防止access_token与用户数据混合(即也可以在非REST环境中工作)或者以日志结束。

答案 1 :(得分:0)

我最终以这种方式发送access_token和POST数据

$params = array(
  "client_id" => "testclient",
  "client_secret" => "testpass",
  "grant_type" => "client_credentials");

//GET TOKEN
$test=curl_req($pageURL."/api/v1/"."token.php", $params, "POST");
//        ^-- Im not using the curl_req2 function below here
// Im using a function, from my old question here: https://stackoverflow.com/questions/13420952/php-curl-delete-request

echo "<pre>";
print_r($test);

$token = array(
  "access_token" =>$test->access_token);

$data = array(
  "Some" =>"data",
  "More" =>"datatatat"
  );

// GET ACCESS using POST and POST data
$test2=curl_req2($pageURL."/api/v1/User.php",$token, $data , "POST");
print_r($test2);



function curl_req2($url,$token,$data,$req)
{
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $req);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token['access_token']));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    //$result = json_decode($result);
    curl_close($ch);

    return $result;
}