Сервер Oauth2.0 в php очень простая реализация — используйте access_token с POST

Я строю небольшой API и хочу использовать oAuth2.0 для входа в систему и обработки токенов.

Я следовал этому пошаговому руководству, чтобы начать: https://bshaffer.github.io/oauth2-server-php-docs/cookbook/

Теперь все это отлично работает, я могу получить access_token отправив почтовый запрос на token.php по ссылке выше:

//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 и если да, то как?

1

Решение

команда в примере:

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

который фактически выдает POST, поскольку CURL вернется к HTTP POST, если указан флаг «-d», см. документацию по «-d» в http://curl.haxx.se/docs/manpage.html

Как правило, сервер OAuth может получить токен при отправке любым из стандартных способов, поэтому a) в параметре POST «access_token», b) в параметре запроса «GET» access_token или c) в параметре Заголовок «Авторизация: предъявитель». Последний вариант на самом деле является предпочтительным методом, так как он предотвращает смешивание access_token с пользовательскими данными (т.е. работает также в средах без REST) ​​или попадание в журналы.

2

Другие решения

В итоге я отправил данные 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;
}
0

По вопросам рекламы [email protected]