Интервьюер: Как реализовать функцию входа в систему с помощью скан-кода?

интервью дизайн

Реальная сцена интервью:

После противостояния Багу и алгоритма третий ребенок вздохнул с облегчением и задержался. Я увидел, как интервьюер слегка улыбнулся: «На самом деле, я действительно хочу спросить… как, по вашему мнению, следует реализовать вход в систему с помощью скан-кода».

Третий ребенок: "А... это, а... это, вот и все, а потом... гм... гм..."

Интервьюер: «Понял, возвращайтесь и ждите уведомления».

Заканчивать……


Ладно, предвестие окончено, давайте перейдем к нашей сегодняшней теме, как реализовать функцию входа по скан-коду?

Сцена входа в систему со скан-кодом

Мы должны быть знакомы со сценой входа в систему с кодом сканирования - многие веб-сайты на стороне ПК предоставляют функцию входа в систему с кодом сканирования, нет необходимости вводить номер учетной записи и пароль на веб-странице, нужно только использовать приложение на мобильном телефоне, например WeChat, Taobao, QQ и т. д., используйте функцию сканирования, отсканируйте QR-код на веб-странице, подтвердите вход, а затем завершите вход на веб-страницу.

扫码登录QQ邮箱

Анализ входа в систему с помощью скан-кода

Давайте проанализируем, сканирование кода для входа в систему, на самом деле включает в себя三种角色, нужно решить两个问题.

три роли

Очевидно, что при входе в систему с помощью QR-кода задействованы три роли:PC端,手机端,服务端.

三端

Соответствующий дизайн должен вращаться вокруг этого三端Чтобы расширить, конкретный дизайн на самом деле, какую функцию должен выполнять каждый конец? Как это должно быть достигнуто? Как должны взаимодействовать конец и конец?

два вопроса

Вход в систему с помощью скан-кода — это, по сути, особый метод аутентификации при входе в систему, и мы сталкиваемся с двумя проблемами.

  • 手机端Как пройти сертификацию
  • PC端Как завершить вход

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

Когда сервер отвечает, ему необходимо проверить ключ маркера, и если он проходит, ответ нормальный; если проверка не удалась, аутентификация не удалась; или, если срок действия маркера истек, ПК должен снова войти в систему для аутентификации, чтобы получить новый токен-ключ.

账号/密码登录过程

Теперь переключитесь на вход в систему со скан-кодом:

  • Аутентификация осуществляется не по паролю учетной записи, а путем сканирования кода на мобильном телефоне
  • Сторона ПК не может получить учетные данные после успешной аутентификации синхронно, и для стороны ПК должен быть какой-то способ получить учетные данные для аутентификации.

Реализация входа в систему с помощью скан-кода

Как пройти аутентификацию на мобильном терминале

Как сгенерировать QR-код

QR-код похож на штрих-код в супермаркете.Штрих-код в супермаркете на самом деле представляет собой строку цифр, на которой хранится серийный номер продукта.

Содержимое QR-кода относительно бесплатное, в нем можно хранить не только числа, но и любые строки. Мы можем думать об этом как о другом представлении персонажей.

Ниже я конвертирую текст в QR-код через веб-сайт:

文字转二维码

Таким образом, процесс сканирования кода на нашем мобильном телефоне фактически представляет собой декодирование QR-кода и получение данных, содержащихся в QR-коде.

Так как же генерируется QR-код?

Прежде всего, QR-код отображается на нашем ПК, поэтому для генерации этой операции ПК должен запросить сервер для получения соответствующих данных, а затем ПК должен сгенерировать QR-код.

Что содержит QR-код?

Двумерный код является важным носителем в нашем сценарии.Сервер должен сгенерировать уникальный идентификатор для этих данных в качестве идентификатора двумерного кода, а также установить время истечения срока действия. ПК-терминал генерирует QR-код в соответствии с идентификатором QR-кода и другими данными.

二维码生成

При этом сервер также должен сохранять некоторые состояния QR-кода:未扫描,已成功,已失效.

Механизм аутентификации приложения

Мы также должны понимать механизм аутентификации мобильного Интернета на основе приложений.

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

За этим стоит набор механизмов аутентификации на основе токенов, которые чем-то похожи на ПК, но несколько отличаются.

APP端登录认证

  • В дополнение к паролю учетной записи, существует также информация об устройстве во время аутентификации входа в приложение.
  • После прохождения проверки пароля учетной записи сервер привяжет учетную запись к устройству и сохранит ее на постоянной основе, включая идентификатор учетной записи, идентификатор устройства, тип устройства и т. д.
  • В дополнение к токен-ключу каждый запрос APP также должен содержать информацию об устройстве.

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

Что сделал код сканирования мобильного телефона?

Теперь ясно, что мы сканируем код на нашем мобильном телефоне, чтобы сделать две вещи:

  • 扫描二维码: идентифицируйте QR-код, отображаемый на ПК, и получите идентификатор QR-кода.

扫描

  • 确认登录: Мобильный терминал запрашивает у сервера аутентификационную информацию (токен-ключ, информация об устройстве) и информацию о двумерном коде (идентификатор двумерного кода), завершает процесс аутентификации и подтверждает вход в систему ПК-терминала.

确认登录

ps: Сканирование кода и подтверждение на мобильном телефоне не суть, поэтому здесь все упрощенно.Один из способов - подать заявку на одноразовый временный токен на сервер при сканировании кода, и принести этот временный токен для доступа к сервер при подтверждении входа.

Как завершить вход на стороне ПК

Далее наступает наше главное событие, мобильный телефон завершил свою работу, как логин нашего сервера входит в состояние логина?

Как мы упоминали ранее, сторона ПК использует токен для определения статуса входа в систему. Затем, после сканирования кода на мобильном телефоне для подтверждения, наш сервер должен сгенерировать соответствующий токен для ПК.

Итак, как ПК получает токен-ключ, необходимый для завершения входа в систему?

如何获取PC token

Сторона ПК может ответить соответствующим образом, получив статус QR-кода:

  • QR код未扫描: без операции
  • QR код已失效: запрос на обновление QR-кода
  • QR код已成功: Получить токен ПК с сервера

Получить статус QR-кода можно тремя основными способами:

голосование

Метод опроса означает, что клиент через регулярные промежутки времени будет активно отправлять на сервер запрос о состоянии QR-кода.

轮询

долгий опрос

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

长轮询

Websocket

Websocket означает, что клиентская часть установит соединение с серверной частью после генерации QR-кода.Как только серверная часть обнаружит, что статус QR-кода изменился, он может напрямую передать информацию во внешний интерфейс через установленное соединение.

Websocket

Суммировать

Из предыдущего анализа мы уже знаем некоторые ключевые моменты входа в систему с помощью сканирования QR-кода Теперь давайте соединим эти точки вместе и посмотрим на общий процесс реализации входа в систему с помощью сканирования QR-кода.

В качестве примера возьмем обычный метод опроса для получения статуса QR-кода:

扫码登录

  1. Посетите страницу генерации QR-кода на стороне ПК, и сторона ПК запрашивает сервер для его получения.二维码ID
  2. Сервер генерирует соответствующий二维码ID, установите срок действия, статус и т. д. QR-кода.
  3. Приобретение ПК二维码IDдля генерации соответствующего QR-кода.
  4. Отсканируйте QR-код на мобильном телефоне, чтобы получить二维码ID.
  5. мобильный терминал手机端tokenи二维码IDОтправьте его на сервер для подтверждения входа.
  6. Проверка сервера手机端token,в соответствии с手机端tokenи二维码IDгенерироватьPC端token
  7. Сторона ПК запрашивает сторону сервера путем опроса через二维码IDПолучить статус QR-кода, в случае успеха вернутьPC token,Авторизация успешна.

Итак, наша функция сканирования и входа в систему была разработана.



Поскольку блоггеры мало знают о соответствующем механизме аутентификации мобильного терминала, если есть какие-либо ошибки или упущения, сообщите об этом блогерам!

Ссылаться на:

[1].Сканировать код для входа можно тремя способами:четвертый E77.GitHub.IO/2019/05/23/…

[2] Каков принцип сканирования QR-кода для входа в систему? :nuggets.capable/post/694097…