Не указан обязательный параметр: & quot; access_token & quot;

Я работаю в Graph API, который позволяет пользователю войти через свою учетную запись Microsoft. Я следую за Начните с Microsoft Graph в приложении PHP
статья.

Теперь я не новичок в Laravel, но я не могу понять проблему. Я использую пакет League OAuth2. И по ссылке выше я должен получить токен доступа перед установлением соединения. Теперь я много занимался поиском отладки, и вот что я нашел.

 $token = $this->createAccessToken($prepared, $grant);

Когда он пытается создать токен, он проверяет, access_token существует до этого или нет. Теперь я понимаю, что access_token будет сгенерирован из этого метода. Так как это могло уже существовать. Может кто-нибудь, пожалуйста, помогите мне с этим?

Вот мой код маршрута:

Route::get('/oauth', function (Request $request) {
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId'                => 'client_id',
'clientSecret'            => 'secret_key',
'redirectUri'             => 'http://localhost:8000/oauth',
'urlAuthorize'            => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
'urlAccessToken'          => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes'                  => 'openid'
]);

if (!$request->has('code')) {
return redirect($provider->getAuthorizationUrl());
} else {
$accessToken = $provider->getAccessToken('authorization_code', [
'code'     => $request->input('code')
]);
exit($accessToken->getToken());
}
});

Благодарю.

Обновить

Теперь я делаю запрос CURL, как это

    $url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
$data  =  'grant_type=authorization_code';
$data .=  '&code=' . $request->input('code');
$data .=  '&client_id=id_here';
$data .=  '&client_secret=secret_here';
$data .=  '&redirect_uri=http://localhost:8000/oauth';
$data .=  '&scopes=openid user.read';
$additional_headers = array(
'Content-Type' => 'application/x-www-form-urlencoded'
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers);
$server_output = curl_exec ($ch);
dd($server_output);

Но вывод / ответ этого запроса CURL получает объект ‘token_id’. Вместо access_token & expiry_in …

1

Решение

Вы не создаете токен доступа, он предоставляется провайдером аутентификации (в данном случае Microsoft).

С authorization_codeпоток вы технически получаете код авторизации. Затем вы отправляете этот код авторизации обратно на сервер, чтобы обменять его на токен доступа. Затем вы передаете этот токен доступа в заголовке авторизации ваших вызовов в Microsoft Graph API.

У меня есть учебник по конечной точке v2, в котором рассказывается, как OAUTH-процесс работает с потоком кода авторизации, который может оказаться полезным: Учебник для конечных точек Microsoft v2.

ОБНОВИТЬ:

Вы не можете использовать такой инструмент, как curl оформить код авторизации. Первый звонок /authorize это GET это приводит к веб-странице, на которую пользователь входит. После этого поставщик аутентификации перенаправляет пользователя обратно на ваш веб-сервер, который затем выдает POST к /token конечная точка.

Если вы хотите использовать curl (или любой другой сценарий на стороне клиента), вам нужно использовать неявное предоставление. У меня есть аналогичная прогулка для этого: Конечная точка v2 и неявное предоставление.

0

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

Других решений пока нет …

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