За последние 24 часа нас посетили 18543 программиста и 1627 роботов. Сейчас ищут 1082 программиста ...

Кастомная stateless-аутентификация для API своими руками - помогите кто опытный в этом, плз

Тема в разделе "Laravel", создана пользователем Roman __construct, 25 сен 2019.

  1. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    По ряду причин решил написать свою stateless-аутентификацию для API.

    Причем, не просто middleware, а именно так, чтобы интегрировать ее по уму, т.е. в
    Код (Text):
    1. config/auth.php
    прописать вроде

    PHP:
    1. 'defaults' => [
    2.     'guard' => 'api',
    3.     'passwords' => 'users',
    4. ],
    5. 'guards' => [
    6.     'api' => [
    7.         'driver' => 'myveryauth',
    8.         'provider' => 'users',
    9.     ],
    10. ],
    и т.д.

    Но я такого никогда не делал, можете набросать последовательность действий для реализации простейшего варианта?

    Прям без самой логики аутентификации (это я потом туда допишу). Типа логика аутентификации такая:

    PHP:
    1. $user = User::find(request('id'));
    ))))

    Какие шаги нужно сделать, чтобы грамотно интегрировать эту логику аутентификации в Laravel вышеописанным способом?
     
    Алекс8 нравится это.
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    подпишусь на ответы))
     
    Roman __construct нравится это.
  3. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    я тоже))))

    ...но где же ответы?!)))
     
    Алекс8 нравится это.
  4. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Ну кстати первую подсказку я нашел как ни странно в офф доках)))

    http://laravel.su/docs/5.5/authentication#adding-custom-guards

    Однако ларавелевские доки традиционно лаконичны и не менее туманны))

    В том смысле что ориентированы на юзеров пишущих в ларавеле еще с первой его версии))
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    примеров нагугливается достаточно много. вопрос в том, что именно ты хочешь изменить по сравнению со встроенной аутентификацией.
     
  6. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    А поговорить как же?)) Гугль неразгоорчиый)
    --- Добавлено ---
    ...что именно? Да я скорее хочу разобраться досконально в этом. А это лучше всего делать когда пишешь реализацию.
     
  7. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Копаюсь сейчас в кодах и манах, пытаюсь понять откуда растут ноги у driver в guard аутентификации. Это то, что мне сейчас нужно. Если кто знает - колитесь!)) Вот, например, пишу я в конфиге:

    PHP:
    1. 'api' => [
    2.             'driver' => 'token',
    3.             'provider' => 'users',
    4.             'hash' => false,
    5.         ],
    и откуда оно потом этот 'token' достает?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    Могу подкинуть практическую задачу по теме. Поговорим :)

    Есть сайт Laravel.ru. на нем форум на движке fluxbb и, похоже, кроме него странички на Laravel. На форуме есть система лайков. И вот в ней прокол по аутентификации/авторизации. Приходится второй раз логиниться.
    Тот сайт не мой, но задача мне близка, т.к. пользуюсь и форумом и ларавелем.

    Задача:
    1. Настроить аутентификацию Laravel так, чтобы он мог использовать хеш пароля из fluxbb.
    2. Использовать для идентификации куку от fluxbb. Естественно движки будут на одном домене.
     
    Roman __construct нравится это.
  9. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    Здесь 'token' это как бы алиас для добычи гарда. В инете ты можешь увидеть такой пример:
    PHP:
    1. Auth::extend('access_token', function ($app, $name, array $config) {
    2. // automatically build the DI, put it as reference
    3. $userProvider = app(TokenToUserProvider::class);
    4. $request = app('request');
    5. return new AccessTokenGuard($userProvider, $request, $config);
    6. });
     
    Roman __construct нравится это.
  11. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    И ну это какбе попроще задача-то, и не совсем-таки по теме :) Если пошагово, то примерно так бы я сделал:

    1. Посмотреть чем именно fluxbb хэширует пароли.
    2. Переделать в Laravel механизм хэширования на п.1
    3. Переписать получение хэша из запроса на получение хэша из куки fluxbb.
    4...

    да какбы вроде и всё))))

    Хотя, если это делать без костылей - то дьявол в нюансах, как обычно :D
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    Попроще потому что я сделал декомпозицию задачи :) но не думаю что ты так запросто справишся.
    --- Добавлено ---
    Сложность в том, что встроенные в ларавель механизмы не имеют прямого аналога с тем что здесь надо. Флаксбб не использует сессию, а только куку. В пятом ларавеле нет гарда использующего куку без сессии.
     
  13. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Так это вроде из мануала пример-то)

    btw, спасибо.

    Я по крайней мере смог сформулировать задачу на данном этапе:

    - Мне нужно написать свой драйвер для гарда

    Но это судя по всему не так просто, потому что оно тащит за собой новые, незнакомые мне ларавелевские сущности, типа "контракта" который нужно имплементировать, и т.п. ))

    Вот ну нахрена они наплодили на ровном месте такие сложности-то? :D //не обращайте внимания, это мой извечный риторический вопрос к создателям фреймворков))
    --- Добавлено ---
    Не люблю я видосы - очень уж долго их смотреть, ибо читаю я оч быстро)) но похоже это именно тот самый случай, когда придется смотреть)))


    --- Добавлено ---
    Ой, давай вот без вот этого "но не думаю что ты так запросто справишся" - оставим это детям пожалуй))) ибо это избыточные сущности не несущие никакой полезной инфы)))

    Насчет куки и сессий - усек, да. А что если сделать это как API а хэш - это типа токена будет? )) Ну, я просто прикидываю как это может быть реализовано проще всего.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Roman __construct нравится это.
  15. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Кстати, автор вышеприведенного видоса - оч хорош в роли препода)) рад тому что открыл его - рекомендую Убунте к просмотру :D хороших преподов меньше чем хороших программистов
    --- Добавлено ---
    omg

    ))))

    от души он так трейтов подключил там )))))

    да и вообще...

    ок, спасибо! буду иметь в виду конечно же
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Ну так да, но эта репа реализует именно твою хотелку. Stateless jwt-токены с интеграцией в laravel. Прям вот правильно, по стандартам и канону )
     
  17. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Да, я его уже подключал, пробовал. Работает :) Но таки хочется своего провайдера смастерить неспешно так))
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    @Roman __construct, смастери, ничего сложного. Делал я на одном проекте, у которого не ложилась структура базы на Eloquent (не мной сделанная. заказчик тогда настоял на своей структуре)
     
  19. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    ага, бывало. ругались прям иногда)))))) там просто заказчик был - тож программер, причем, именно спец по базам, для него это святое)))) а я просто дурел с его привычки называть таблицы и поля КАПСОВЫМИ_НАЗВАНИЯМИ и именовать столбцы примерно так STR_SOMESTRING или LONGINT_MYNUMBER :D но это еще цвечтоки. впрочем, ладно)) хорошо что это закончилось))
     
  20. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
  21. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    ну, пример вроде рабочий :)

    нашел небольшую ошибку в User.php:

    PHP:
    1. $arr_user = $this->conn->find('users', ['username' => $credentials['username']]);
    он захардкодил имя базы 'users', но до этого он указал его как конфигурируемый параметр в mongo.php то есть если вы там что-то другое пропишете - самолет не взлетит))

    в общем, теперь надо это всё осмыслить и переписать на что-то приличное, типа MySQL)) для начала ))))))