Laravel-App с базовой аутентификацией в URL: ОК для веб, не ОК для API - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь запустить Коэль (или Кутр , вилка) за базовым HTTP-диалогом аутентификации пользователя / пароля: https://koel:8001 за обратным прокси-сервером nginx https://koel с включенной базовой аутентификацией.

Koel - приложение Laravel, использующее токены JWT и поле заголовка Authorization, например:

Authorization: Bearer eyJ0eX…

Thisозначает, что каждый запрос перезаписывает базовый заголовок авторизации (который использует одно и то же поле), и снова и снова появляется диалоговое окно входа в систему.

Когда я устанавливаю APP_URL в файле .env на https://user:pass@koel, все ссылкичтобы статические файлы действительно правильно выбирались.Такие вызовы API, как https://koel/api/data, к сожалению, игнорируют это.

Могу ли я использовать какое-либо промежуточное ПО для ввода имени пользователя и пароля в вызовы API?

1 Ответ

0 голосов
/ 10 декабря 2018

Принцип JWT состоит в том, чтобы избегать использования базовой аутентификации, которая совсем не похожа на аутентификацию (ваши учетные данные передаются в открытом виде с базовой аутентификацией).

Итак, я бы сказал, что JWT использует Authorizationэто хорошая вещь, поскольку она предотвращает утечку ваших учетных данных в случае неправильной конфигурации.

Принцип JWT состоит в том, чтобы при действительных учетных данных генерировать токен, который хранится в вашем браузере (немного похоже на cookie-файл).).Затем с этим токеном нет необходимости представлять какую-либо аутентификацию (поэтому учетные данные присутствуют только один раз при аутентификации, а не во время полного сеанса, как при базовой или дайджест-аутентификации).

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

С Kutr, однако, я сделалнекоторый механизм перехвата, чтобы вы могли подключить свою собственную страницу входа (которая может быть такой же простой, как проверка базовой аутентификации).

Она доступна здесь

В вашем случае заменитеначало файла от:

// Require your CMS bootstrap code here
require_once("yourCMSbootstrap.php");
// Bootstrap your CMS and check the session is valid (if not your CMS will fallback the login screen)
checkSession();

до

// Assert the user provided an basic or digest authentication
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit();
} else {
    $login = $_SERVER['PHP_AUTH_USER'];
    $pw = $_SERVER['PHP_AUTH_PW'];
    if (!checkValidLoginAndPW($login, $pw))
    {
        header('HTTP/1.0 401 Unauthorized');
        echo 'Game over';
        exit();
    }
}    

Убедитесь, что логин пользователя также существует в приложении Kutr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...