Какие есть схемы аутентификации, не требующие ввода пароля на разных устройствах?
Для мелкого и несерьёзного проекта выходного дня хочу добавить что-то типа форума / ленты постов-с-комментами.
Вместо полноценной регистрации пользователей с подтверждением email'а или телефона, OAuth2 через соц.сети-гуглы с MFA, хочу первобытно-примитивное нечто с минимумом действий и требований от пользователя.
Задача просто узнавать пользователя при последующих визитах, давать ему возможность комментировать от своего никнейма. Что-то подобное реализовано в телеграмном блог-сервисе telegra.ph — вроде там просто генерится UUID, который сохраняется в куках. Когда даже впервые открываешь сайт, сразу можно писать контент.
Тут всё хорошо, кроме захода одного пользователя с разных устройств: с компа и с мобилки. Как их максимально просто связать?
Может, добавить одноразовый код – на авторизованном устройстве можно его получить, записать на бумажку (например сгенерить для юзера 5 случайных словарных слов, сохранить в БД) – и на неавторизованной мобилке ввести – тогда мобилка тоже авторизуется, а код «сгорит». В следующий раз будет новый.
Наверное, есть какие-то элегантные решения, максимально удобные для непродвинутых пользователей?
ну тк вроде для этого люди и придумали вход через соц сети. человек сидит в своих соц сетях со всех устройств и откуда бы он не зашел - авторизуется. что может быть проще одного клика на иконку соц сети?
Написано
Сергей Соколов
@sergiks Автор вопроса, куратор тега Веб-разработка
iBird Rose, аудитория такая, без email'ов, без аккаунтов в соцсетях. Поэтому нужно иное, «игрушечное».
Сергей Соколов, в таком случае потеряешь в удобстве. людям придется выполнять кучу ненужных действий.
посмотри создание кошелька в MetaMask. видимо, тебе понравится
Простая математика позволяет создать токен, в котором зашифрованы ID пользователя и хэш от того, чем вы готовы его проверить (пароль, личные данные, ID последнего поста...). Показываете любому пользователю по запросу его токен - указав его, он сможет залогиниться на любом другом устройстве. А будет он его выписывать на бумажку или отправлять себе на мобилу по почте - это уже его трудности.
Просите у пользователя почту и высылаете на эту самую почту ссылку вида: https://yousite.ru/?authcode=sdksfkjdfsdjksd
Где authcode - это зашифрованный JSON с почтой юзера и текущей датой.
Когда кто-то переходит по такой ссылке, расшифровываете JSON обратно и авторизуете юзера под той почтой, что указана внутри JSON. Дата внутри нужна, если вы вдруг захотите, чтобы ссылка сгорала спустя неделю (допустим).
Из плюсов этой схемы то, что вам не нужна база данных для хранения пользователей и их паролей. Все данные хранятся в ссылке, которая шифруется только по вам известному вам алгоритму и только вы можете ее расшифровать.
Сергей Соколов
@sergiks Автор вопроса, куратор тега Веб-разработка
нет, БД не проблема, посты-комменты хранить надо же )
Проблема заставлять пользователя иметь аккаунт почты (у некоторых нет), и переходить куда-то для проверки почты и тыка по ссылке. Именно этой суеты и отвлечения от сайта-форума надо избежать в первую очередь.
Зашел — сразу можно писать.
Я так понимаю у вас основная проблема в том, что один участник может представится другим участником и надо бы как-то избежать этого?
Написано
Сергей Соколов
@sergiks Автор вопроса, куратор тега Веб-разработка
Надим Закиров, это не проблема, т.к. куки с uuid не подберешь.. Проблема с разными устройствами. И не столько проблема, сколько может я чеготне знаю как еще можно. Пока единственный известный мне хороший пример это telegra.ph
Сергей Соколов, как вариант, можно спрашивать чуть больше данных, чем нужно и так идентифицировать человека.
Например, спрашиваем Имя + любимое блюдо + любимый цвет. Комбинации будут достаточно уникальными для мелкого проекта. Даже если человек потом зайдет с телефона, по совпадению комбинации авторизуем человека и все.
Надим Закиров, самая большая проблема с ответами на эти дебильные вопросы - это вспомнить через полгода, что ты там когда-то на бегу навыдумывал, чтобы отвязались.
Сергей Соколов
@sergiks Автор вопроса, куратор тега Веб-разработка
FanatPHP, это ведёт к глубокой философской дискуссии на тему, что составляет постоянное «Я» человека; не забудется; не потеряется при амнезии и деменции; не лежит на поверхности и не копируется любым сторонним наблюдателем; вообще не копируется; отзывается; выдаётся только по инициативе субъекта.
Для мелкого проекта выходного дня можно сделать авторизацию по принципу Неуловимого Джо.
У меня больше 10 лет работает несколько таких проектов, где авторизовываться не требуется - достаточно написать любое имя. Обычно нормальным людям не приходит в голову заниматься такими шутками как имперсонация, и всё прекрасно работает без каких-бы то ни было конфликтов или нареканий.
Если же аудитория потенциально конфликтная, которая попытается использовать отсутствие идентификации пользователей в корыстных целях, то надо не маяться дурью, изобретая какие-то хитровыдуманные схемы, а использовать любой стандартный механизм.
Сергей Соколов
@sergiks Автор вопроса, куратор тега Веб-разработка
этот фрактал можно рассмотреть под увеличением, и тогда вместо четкой границы выдуманной дихотомии появится что-то между: и аудитория попытается жульничать или ошибется, и Джо по-прежнему никому не нужен.
Приоритет таки удобство, минимум действий для большинства случаев.