Yii2: Как лучше организовать авторизацию между двумя сайтами по API?
Здравствуйте.
Есть два сайта. Первый с базой пользователей и начал под него писать API, на втором сайте есть некий функционал, который будет доступен после авторизации.
Тут по желанию заказчика система должна работать следующим образом: Страница с логин формой, юзер её заполняет, посылается запрос по апи на первый сайт, от него получаем ответ, авторизовываем юзера и даём пользоваться функционалом сайта.
Мне не совсем понятно, как это правильно реализовать логически. Понятно, что можно использовать HttpBasicAuth в контроллерах, но не понятно, как оно должно в целом работать. То есть я посылаю логин и пароль на первый сайт, нахожу юзера, проверяю верный ли пароль, а дальше что? Что тут надо вернуть второму сайту и как это правильно обработать на его стороне? Что в таком случае записывать в куки (или как-то ещё) что бы можно было идентифицировать юзера на страницах?
P.S. Документацию смотрел, там всё понятно, кроме этого момента.
Если второй сайт на там же сервере - то можно обращаться напрямую к базе второго сервера к примеру.
Если нет, то на втором сайте писать API для первого сервера.
Создаётся впечатление, что вопрос вы совсем не читали)))
Если второй сайт на там же сервере - то можно обращаться напрямую к базе второго сервера к примеру.
Не вариант, так как
Тут по желанию заказчика система должна работать следующим образом: Страница с логин формой, юзер её заполняет, посылается запрос по апи на первый сайт, от него получаем ответ, авторизовываем юзера и даём пользоваться функционалом сайта.
Значит плохо доки смотрели.
Вкратце, вам нужно реализовать систему по подобию -
developer.uz/blog/yii2-rest-authentication-and-aut...
Смотрел хорошо и с этой частью проблем не возникло, на первом сайте апи завелось и токен возвращает исправно по запросу. Мне больше не понятно, как правильно это всё оформить на втором сайте, где юзер заполняет свои данные в форму и отправляет её.
Андрей, Перечитал.
Второй сайт у вас как обычный будет значит работать.
У вас все еще проще. Если второй сайт на Yii2:
Перепишите метод, отвечающий за аутентификацию. Из минусов - придется спрашивать постоянно первый сайт.
Если актуальность данных авторизации не критична, то можно записать в кэш, чтобы не дергать сайт лишний раз.
Dmitry Bay, Уже ближе к истине :) Тоже думал по поводу того, что бы переписать метод аутентификации на втором, только тут затык у меня и вышел. Я не очень понимаю как устроить работу всего этого. Если у вас есть более конкретные идеи, то вы бы меня спасли.
Модель User, наследующая ActiveRecord - переводите в Model .
В функции Login - делаете запрос по правилам на API, если получаете, возвращаете массив, заполняете его своим Model и делаете логин.
И вроде бы вам еще переписать findIdentity() придется в той же модели.
Мне кажется это самый простой способ унаследовать весь функционал.
В самом простом возможном варианте, если вебсайт не на yii2, то проверяете, подходит ли логин с паролем, и записываете auth_key в сессию. И при каждом запросе на ваш сайт, проверяете, есть ли в системе АПИ ваш auth_key и дальше выводите данные для пользователя. Можно использовать кэш, и записывать туда данные такие как ФИО, логин, ид логина и тд.