Laravel Passport: 401 Unauthenticated, но ключи шифрования такие же

У меня странная проблема с аутентификацией по паспорту при развертывании моего приложения на новом сайте, несмотря на то, что раньше у меня не было проблем с этим.

Я использую функцию предоставления пароля Passport для входа в приложение (Laravel 5.4). Это происходит, когда пользователь отправляет свое имя пользователя / пароль в формате JSON на сайт, а оттуда он отправляет эти учетные данные в OAuth / токен, чтобы получить ключ API для сайта. Раньше это работало нормально, и мои ключи OAuth зафиксированы в репозитории.

На днях мне удалось развернуть сайт на новом сервере (с теми же ключами OAuth), восстановить (я думаю) ключ приложения, загрузить мои данные с зашифрованными паролями, и проверка подлинности сработала нормально. Однако сегодня я сделал то же самое в другой ветке, и теперь вход в систему возвращает 401 Unauthorized.

Я сделал почти все перестановки, которые только мог придумать: удалить ключи OAuth, восстановить ключ приложения, переустановить паспорт, и все же приложение отказывается входить в систему. Я не верю, что это имеет какое-либо отношение к исходному коду, потому что никаких изменений Я сделал в этой ветке, это повлияет на систему входа в систему.

Я даже попытался скопировать ключ приложения рабочего сайта, а ключи OAuth на сломанный сайт по-прежнему не работают.

Что меня еще больше озадачивает, так это то, что у меня есть другой сайт с ключом приложения другой, ключами другой OAuth, но с теми же данными, и система входа в систему работает нормально.

Я недостаточно понимаю пакет league / oauth2, чтобы понять, почему он не работает. Что мне не хватает?

Спасибо, Мэтт

Проверьте URL-адрес обратного вызова в API для вашего клиента. Если вы сейчас находитесь в другой домнайне, вам нужно это изменить.

delboy1978uk 21.09.2018 16:54

Вы используете маршруты в web.php или api.php? Также какой тип промежуточного программного обеспечения выполняет ваши проверки? Стандартный Auth: Api? Нужны подробности.

Brad Goldsmith 21.09.2018 17:39

@ delboy1978uk Я считаю, что URL-адрес обратного вызова - это просто localhost; возможно, установка этого вручную может помочь?

mkrell 21.09.2018 17:49

@BradGoldsmith маршрут, который фактически отправляет внутренние сообщения в / oauth / token, находится в web.php. Промежуточным программным обеспечением Web являются EncryptCookies, AddQueuedCookiesToResponse, ShareErrorsFromSession, SubstituteBindings. Api - это просто throttle:60,1, а auth:api

mkrell 21.09.2018 17:52

@mkrell хорошо, плохо, я неправильно прочитал вопрос, прошу прощения. У меня была очень похожая проблема, когда я предоставлял client_credentials для клиентов, чтобы попасть в мой API. Вы пробовали php Artisan Passport: ключи для восстановления ключей шифрования паспорта?

Brad Goldsmith 21.09.2018 18:13

@BradGoldsmith У меня действительно есть, но я думаю, что я понял причину по предложению коллеги. Неисправный сайт на самом деле является попыткой переместить существующий сайт на новый сервер (так что сломанный сайт имеет тот же домен), но DNS фактически не изменился. В моем коде написано, что нужно отправить сообщение на url('/oauth/token'). Другими словами .... на старый сайт.

mkrell 21.09.2018 18:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
509
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, плохой код не окупается.

Я не упомянул, что сайт, который я пытаюсь развернуть, представляет собой попытку перенести домен на новый сервер. И неработающий сайт, и его активный дочерний сайт имеют одно и то же доменное имя. Это код, который отправляется на конечную точку /oauth/token моих собственных доменов:

$username = Input::json('username');
$password = Input::json('password');

$page = Input::get('page');

$client = Client::find(2);

$http = new GuzzleHttp\Client();

try {
    $response = $http->post(url('oauth/token'), [   # <-- see the problem?
        'form_params' => [
            'grant_type'    => 'password',
            'client_id'     => '2',
            'client_secret' => $client->secret,
            'username'      => $username,
            'password'      => $password,
            'scope'         => '',
        ],
    ]);

#...

Проблема довольно забавная. Поскольку DNS для сайта еще не переключился, запросы к моему собственному сайту собираетесь на старый сайт, а не на этот. Значит, я возвращаюсь к Unauthenticated. Потому что я не такой.

Решением было отредактировать файл /etc/hosts на сервере, чтобы указать домен на самого себя. Таким образом, любые вызовы его собственного api фактически перейдут к его собственному api. Задача решена.

Другие вопросы по теме