Как получить код авторизации от предоставления кода авторизации в Laravel Passport? - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь использовать код авторизации для входа сторонних клиентов и предоставления доступа к моему API. Первый шаг - запросить разрешение в / oauth / authorize с необходимыми параметрами. Когда я делаю это, я получаю сообщение об ошибке, говорящее «Вызов функции-члена getKey () в null». Я замечаю, что получаю эту же ошибку, даже когда нет параметров.

запрос разрешения на предоставление кода авторизации

Это код в моем web.php, который обрабатывает маршрут / redirect.

Route::get('/redirect', function (Request $request) {
    $request->session()->put('state', $state = Str::random(40));
    $query = http_build_query([
        'client_id' => '6',
        'redirect_uri' =>  'http://127.0.0.1:8000/callback',
        'response_type' =>  'code',
        'scope' => '',
        'state' => $state,
    ]);
    return redirect('http://127.0.0.1:8000/oauth/authorize?' . $query);
});

Если я пытаюсь напрямую сделать запрос к http://127.0.0.1:8000/oauth/authorize, я получаю ответ об ошибке, показанный ниже.

Неподдерживаемый тип гранта

1 Ответ

0 голосов
/ 31 октября 2019

Запрос, отправленный вами на шаге 1, не работает, потому что это не то, как должен работать поток oauth. Поток, который вы реализуете, представляет собой трехэтапный процесс, который пользователь завершает в браузере или приложении, чтобы войти в ваше приложение и запросить, чтобы приложение или сайт, с которого они пришли, имели доступ к вашему API от своего имени. Делая ваш запрос с помощью почтового запроса почтальона, вы не можете получить доступ к потоку входа в систему, поэтому он пытается вернуть ключ для уже аутентифицированного пользователя (которого нет), поэтому $user->getKey() не работает, потому что $user равно нулю,

Для второй ошибки

/ oauth / authorize не принимает этот тип предоставления, потому что он не возвращает предоставления. Существует 3 шага для входа в систему oauth

  1. Стороннее приложение перенаправляет пользователя на ваш сервер для входа в систему, передавая URL обратного вызова для перенаправления обратно на

  2. Пользователь входит в систему, и ваше приложение перенаправляет их обратно на сторонний сайт, передавая код авторизации, который стороннее приложение использует для запроса токена доступа.

  3. Третийприложение party использует код авторизации, полученный в 2, чтобы запросить /oauth/authorize и запросить токен доступа, который затем можно использовать для доступа к вашему API от имени пользователя.

Таким образом, причина, по которой ваш звонок почтальона на /oauth/authorize не работает с неподдерживаемым типом, заключается в том, что вы пытаетесь выполнить шаг 3 в URL-адресе к шагу 2. Вам необходимо получить авторизацию. код в шаге 2, а затем сделайте запрос к /oauth/token, чтобы получить токен доступа.

Если вы пытаетесь предоставить аутентификацию пользователя сторонним приложениям, вам нужно реализовать этот поток через браузер, чтобы у пользователя была возможность войти через ваш сервер. В этом случае 'redirect_uri' в вашем фрагменте кода должен быть чем-то, что вы принимаете из запроса, а не жестко закодированным, так как этот URL-адрес - то, куда пользователь будет перенаправлен обратно после аутентификации в вашем приложении. Получив код авторизации, вы можете сделать REST-вызов за кулисами, чтобы получить настоящий токен доступа.

Если вы пытаетесь выполнить аутентификацию исключительно по вызовам REST / API, вам придется использовать другой тип предоставления, скорее всего предоставления учетных данных клиента

...