Реальная сцена интервью:
После противостояния Багу и алгоритма третий ребенок вздохнул с облегчением и задержался. Я увидел, как интервьюер слегка улыбнулся: «На самом деле, я действительно хочу спросить… как, по вашему мнению, следует реализовать вход в систему с помощью скан-кода».
Третий ребенок: "А... это, а... это, вот и все, а потом... гм... гм..."
Интервьюер: «Понял, возвращайтесь и ждите уведомления».
Заканчивать……
Ладно, предвестие окончено, давайте перейдем к нашей сегодняшней теме, как реализовать функцию входа по скан-коду?
Сцена входа в систему со скан-кодом
Мы должны быть знакомы со сценой входа в систему с кодом сканирования - многие веб-сайты на стороне ПК предоставляют функцию входа в систему с кодом сканирования, нет необходимости вводить номер учетной записи и пароль на веб-странице, нужно только использовать приложение на мобильном телефоне, например WeChat, Taobao, QQ и т. д., используйте функцию сканирования, отсканируйте QR-код на веб-странице, подтвердите вход, а затем завершите вход на веб-страницу.
Анализ входа в систему с помощью скан-кода
Давайте проанализируем, сканирование кода для входа в систему, на самом деле включает в себя三种角色
, нужно решить两个问题
.
три роли
Очевидно, что при входе в систему с помощью QR-кода задействованы три роли:PC端
,手机端
,服务端
.
Соответствующий дизайн должен вращаться вокруг этого三端
Чтобы расширить, конкретный дизайн на самом деле, какую функцию должен выполнять каждый конец? Как это должно быть достигнуто? Как должны взаимодействовать конец и конец?
два вопроса
Вход в систему с помощью скан-кода — это, по сути, особый метод аутентификации при входе в систему, и мы сталкиваемся с двумя проблемами.
-
手机端
Как пройти сертификацию -
PC端
Как завершить вход
Если вы используете обычную учетную запись и пароль для входа в систему для аутентификации, ПК завершит аутентификацию с помощью учетной записи и пароля, а затем сервер синхронно вернет идентификатор, такой как токен-ключ, на ПК, и ПК запросит сервер, который должен нести токен-ключ для идентификации и сертификации.Статус вашего собственного входа в систему.
Когда сервер отвечает, ему необходимо проверить ключ маркера, и если он проходит, ответ нормальный; если проверка не удалась, аутентификация не удалась; или, если срок действия маркера истек, ПК должен снова войти в систему для аутентификации, чтобы получить новый токен-ключ.
Теперь переключитесь на вход в систему со скан-кодом:
- Аутентификация осуществляется не по паролю учетной записи, а путем сканирования кода на мобильном телефоне
- Сторона ПК не может получить учетные данные после успешной аутентификации синхронно, и для стороны ПК должен быть какой-то способ получить учетные данные для аутентификации.
Реализация входа в систему с помощью скан-кода
Как пройти аутентификацию на мобильном терминале
Как сгенерировать QR-код
QR-код похож на штрих-код в супермаркете.Штрих-код в супермаркете на самом деле представляет собой строку цифр, на которой хранится серийный номер продукта.
Содержимое QR-кода относительно бесплатное, в нем можно хранить не только числа, но и любые строки. Мы можем думать об этом как о другом представлении персонажей.
Ниже я конвертирую текст в QR-код через веб-сайт:
Таким образом, процесс сканирования кода на нашем мобильном телефоне фактически представляет собой декодирование QR-кода и получение данных, содержащихся в QR-коде.
Так как же генерируется QR-код?
Прежде всего, QR-код отображается на нашем ПК, поэтому для генерации этой операции ПК должен запросить сервер для получения соответствующих данных, а затем ПК должен сгенерировать QR-код.
Что содержит QR-код?
Двумерный код является важным носителем в нашем сценарии.Сервер должен сгенерировать уникальный идентификатор для этих данных в качестве идентификатора двумерного кода, а также установить время истечения срока действия. ПК-терминал генерирует QR-код в соответствии с идентификатором QR-кода и другими данными.
При этом сервер также должен сохранять некоторые состояния QR-кода:未扫描
,已成功
,已失效
.
Механизм аутентификации приложения
Мы также должны понимать механизм аутентификации мобильного Интернета на основе приложений.
Прежде всего, мобильный терминал, как правило, не хранит пароль для входа.Мы обнаружили, что вход в систему на основе пароля учетной записи требуется только при загрузке приложения и первом входе в систему.Нет необходимости вводить пароль учетной записи еще раз, это может войти автоматически.
За этим стоит набор механизмов аутентификации на основе токенов, которые чем-то похожи на ПК, но несколько отличаются.
- В дополнение к паролю учетной записи, существует также информация об устройстве во время аутентификации входа в приложение.
- После прохождения проверки пароля учетной записи сервер привяжет учетную запись к устройству и сохранит ее на постоянной основе, включая идентификатор учетной записи, идентификатор устройства, тип устройства и т. д.
- В дополнение к токен-ключу каждый запрос APP также должен содержать информацию об устройстве.
Поскольку мобильное устройство уникально, оно может генерировать эксклюзивный токен для каждого клиента, и срок действия этого токена не должен истекать, поэтому принцип заключается в том, что мы можем войти один раз и использовать его в течение длительного времени.
Что сделал код сканирования мобильного телефона?
Теперь ясно, что мы сканируем код на нашем мобильном телефоне, чтобы сделать две вещи:
-
扫描二维码
: идентифицируйте QR-код, отображаемый на ПК, и получите идентификатор QR-кода.
-
确认登录
: Мобильный терминал запрашивает у сервера аутентификационную информацию (токен-ключ, информация об устройстве) и информацию о двумерном коде (идентификатор двумерного кода), завершает процесс аутентификации и подтверждает вход в систему ПК-терминала.
ps: Сканирование кода и подтверждение на мобильном телефоне не суть, поэтому здесь все упрощенно.Один из способов - подать заявку на одноразовый временный токен на сервер при сканировании кода, и принести этот временный токен для доступа к сервер при подтверждении входа.
Как завершить вход на стороне ПК
Далее наступает наше главное событие, мобильный телефон завершил свою работу, как логин нашего сервера входит в состояние логина?
Как мы упоминали ранее, сторона ПК использует токен для определения статуса входа в систему. Затем, после сканирования кода на мобильном телефоне для подтверждения, наш сервер должен сгенерировать соответствующий токен для ПК.
Итак, как ПК получает токен-ключ, необходимый для завершения входа в систему?
Сторона ПК может ответить соответствующим образом, получив статус QR-кода:
- QR код
未扫描
: без операции - QR код
已失效
: запрос на обновление QR-кода - QR код
已成功
: Получить токен ПК с сервера
Получить статус QR-кода можно тремя основными способами:
голосование
Метод опроса означает, что клиент через регулярные промежутки времени будет активно отправлять на сервер запрос о состоянии QR-кода.
долгий опрос
Длительный опрос означает, что клиент активно отправляет запрос на статус QR-кода на сервер, и сервер будет блокировать запрос в зависимости от ситуации до тех пор, пока информация о QR-коде не будет обновлена или не истечет время ожидания. После того, как клиент получит возвращенный результат, если QR-код не был отсканирован, он будет продолжать отправлять запрос-запрос до тех пор, пока не изменится статус (недействительный или успешный).
Websocket
Websocket означает, что клиентская часть установит соединение с серверной частью после генерации QR-кода.Как только серверная часть обнаружит, что статус QR-кода изменился, он может напрямую передать информацию во внешний интерфейс через установленное соединение.
Суммировать
Из предыдущего анализа мы уже знаем некоторые ключевые моменты входа в систему с помощью сканирования QR-кода Теперь давайте соединим эти точки вместе и посмотрим на общий процесс реализации входа в систему с помощью сканирования QR-кода.
В качестве примера возьмем обычный метод опроса для получения статуса QR-кода:
- Посетите страницу генерации QR-кода на стороне ПК, и сторона ПК запрашивает сервер для его получения.
二维码ID
- Сервер генерирует соответствующий
二维码ID
, установите срок действия, статус и т. д. QR-кода. - Приобретение ПК
二维码ID
для генерации соответствующего QR-кода. - Отсканируйте QR-код на мобильном телефоне, чтобы получить
二维码ID
. - мобильный терминал
手机端token
и二维码ID
Отправьте его на сервер для подтверждения входа. - Проверка сервера
手机端token
,в соответствии с手机端token
и二维码ID
генерироватьPC端token
- Сторона ПК запрашивает сторону сервера путем опроса через
二维码ID
Получить статус QR-кода, в случае успеха вернутьPC token
,Авторизация успешна.
Итак, наша функция сканирования и входа в систему была разработана.
Поскольку блоггеры мало знают о соответствующем механизме аутентификации мобильного терминала, если есть какие-либо ошибки или упущения, сообщите об этом блогерам!
Ссылаться на:
[1].Сканировать код для входа можно тремя способами:четвертый E77.GitHub.IO/2019/05/23/…
[2] Каков принцип сканирования QR-кода для входа в систему? :nuggets.capable/post/694097…