Как я могу получить код авторизации в REST-API MediaWiki с «расширением OAuth» и без взаимодействия с пользователем?

#php #api #rest #oauth-2.0 #mediawiki

Вопрос:

Я создал запрос REST-API в MediaWiki с расширением OAuth. Моя цель-создать приложение для вставки данных в MediaWiki. Чтобы это сработало, нам нужны следующие шаги:

шаг 1: ПОЛУЧИТЕ код авторизации шаг 2: ОПУБЛИКУЙТЕ маркер доступа

Проблема заключается в шаге 1, где мы заполнили параметры «response_type» и «client_id» «кодом» и «<client_id>» (код, который мы получили при создании OAuth-потребителя), но вывод сценария-это перенаправление, а не код, который мне нужен для следующего шага. Если я перейду по созданному URL-адресу вручную, я получу страницу аутентификации, и если я ее приму, я перенаправлюсь на страницу с кодом (он находится в URL новой страницы). Мне нужно. Кстати, код не находится внутри ссылки перенаправления.

Мои вопросы таковы:

  1. все ли шаги в правильном порядке и нужен ли мне первый шаг?
  2. если все в приведенном выше вопросе правильно, то как мне получить код без взаимодействия с пользователем?

Результат таков:

 <!doctype html><title>Redirect</title>
<a href="<domain>/index.php?title=Spezial:Anmeldenamp;amp;
returnto=Spezial:OAuth/rest redirectamp;amp;
returntoquery=response_type=code&client_id=<client_id>
&rest_url=%2Fj10771%2Frest.php%2Foauth2%2Fauthorize">
<domain>/index.php?title=Spezial:Anmeldenamp;amp;
returnto=Spezial:OAuth/rest redirectamp;amp;
returntoquery=response_type=code&client_id=<client_id>
&rest_url=%2Fj10771%2Frest.php%2Foauth2%2Fauthorize</a> 

и сценарий:

 <?php

// get authorization code
$url = '<domain>/rest.php/oauth2/authorize?response_type=codeamp;client_id=<client_id>';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$result = curl_exec($curl);

curl_close($curl);




// get access token

$url = '<domain>/rest.php/oauth2/access_token';

$grant_type    = 'authorization_code';
$code          = $resu<
$client_id     = '<client_id>';
$client_secret = '<client_secret>';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, "grant_type=$grant_typeamp;code=$codeamp;client_id=$client_idamp;client_secret=$client_secret");

$result = curl_exec($curl);

curl_close($curl);

$result = json_decode($result, true);

print_r($result);
echo curl_error($curl);
 

Комментарии:

1. Хм, более или менее главный смысл OAuth2 в том, что для получения токена требуется взаимодействие с пользователем … mediawiki.org/wiki/OAuth/For_Developers#OAuth_in_a_nutshell