Картинка для понимания технического принципа входа по скан-коду

Архитектура

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

Вход по скан-коду в том же продукте

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

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

同一产品扫码登录

Как показано на рисунке выше, весь процесс относительно прост и условно разделен на следующие этапы:

1. Пользователь инициирует вход в систему с помощью QR-кода: в это время веб-сайт сначала сгенерирует QR-код и в то же время сохранит логотип, соответствующий QR-коду, чтобы отслеживать статус сканирования QR-кода и затем вернуть кодовую страницу QR в В браузере, браузер сначала отображает QR-код, а затем инициирует опрос статуса сканирования в соответствии с инструкциями Javascript-скрипта. Так называемый опрос означает, что браузер вызывает API веб-сайта каждые несколько секунд, чтобы запросить результат входа в систему при сканировании QR-кода, и во время запроса выполняется идентификация QR-кода. В некоторых статьях говорится, что здесь можно использовать WebSocket.Хотя ответ WebSocket относительно своевременный, учитывая совместимость и сложность, большинство решений все же выберет опрос или длительный опрос.В конце концов, не имеет значения, если связь при этом немного задерживается. время.

2. Пользователь сканирует код для подтверждения входа: пользователь открывает мобильное приложение, использует функцию сканирования кода, которая поставляется вместе с приложением, сканирует QR-код, отображаемый в браузере, а затем приложение извлекает информацию для входа в QR-код. код и отображает страницу подтверждения входа. Эта страница может быть собственной страницей приложения или удаленной страницей H5. Здесь используется собственная страница. После того, как пользователь нажимает кнопку подтверждения или согласия, приложение отправляет QR информацию о коде и токен текущего пользователя к API-интерфейсу веб-сайта, а API-интерфейс веб-сайта подтверждает пользователя. то же время.

3. Вход для проверки веб-сайта выполнен успешно: на шаге 1 на странице входа с QR-кодом начинается опрос статуса сканирования. Если пользователь «подтвердил вход», веб-сайт сгенерирует привязку QR-кода при опросе для доступа к API веб-сайта. , Установите сеанс входа пользователя, а затем верните сообщение об успешном входе в интерфейс. Поддержание состояния входа в систему здесь — это используемый механизм сеанса, или его можно заменить другими механизмами, такими как JWT.

Чтобы обеспечить безопасность входа в систему, необходимо принять некоторые меры безопасности, которые могут включать следующие методы:

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

  • Установите срок действия QR-кода, и он будет автоматически удален по истечении срока его действия, чтобы занимаемые им ресурсы оставались в разумных пределах;

  • Ограничьте использование QR-кода только один раз, чтобы предотвратить повторные атаки;

  • QR-код использует достаточно длинную случайную строку, чтобы она не была занята злонамеренным исчерпанием;

  • Используйте передачу HTTPS для защиты данных входа в систему от прослушивания и подделки.

Вход по скан-коду для сторонних приложений

В дополнение к предоставлению методов входа в свои собственные учетные записи многие веб-сайты теперь предоставляют вход в систему с помощью скан-кода WeChat, вход в систему с помощью скан-кода Weibo и другие методы.Это очень удобно для пользователей, но многие сайты входят в систему в первый раз, чтобы получить пользовательский номер мобильного телефона.Если вам нужно будет использовать код подтверждения мобильного телефона для повторного входа в систему, пользователь будет чувствовать себя немного обманутым, но этот вопрос не обсуждается в этой статье.

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

二维码登录-第三方应用登录

Вот некоторые ключевые моменты, в частности:

1. Шаг 3. Создайте запись запроса на вход в WeChat: после того, как пользователь просканирует код и согласится войти, браузер будет перенаправлен на стороннее приложение на шаге 25. Если запись запроса на вход не была создана ранее, веб-сайт не может быть уверен, что вход в систему инициирован сам, что может привести к атакам с подделкой межсайтовых запросов. Например, используя WeChat приложения для входа в QR-код, обманывая авторизацию пользователя и, наконец, перезванивая на другие сайты, сайт обратного вызова может только пассивно принять его. будет заблокирован. Поэтому после того, как стороннее приложение создаст запись запроса на вход, ему также необходимо вставить логотип записи в URL-адрес QR-кода для доступа к логину WeChat.WeChat вернет логотип в том виде, в котором он есть, после того, как пользователь согласится войдите в систему. Стороннее приложение может проверить это на шаге 26. Идентификатор недействителен.

2. Шаг 17 Отобразите имя приложения и запросите информацию для авторизации: Поскольку WeChat поддерживает множество сторонних приложений, необходимо четко информировать пользователя, какое приложение входит в систему и к какой информации может получить доступ приложение.Это необходимая информация для пользователю принять решение о входе в систему. Следовательно, после сканирования кода мобильный терминал WeChat должен перейти на открытую платформу WeChat, чтобы запросить информацию стороннего приложения, соответствующую QR-коду.

3. Шаг 24. Временный код авторизации для входа: WeChat Open Platform не возвращает напрямую информацию о пользователе для входа в браузер, потому что стороннее приложение также должно авторизовать пользователя и поддерживать состояние сеанса, которое подходит для обработки на на стороне сервера приложений; кроме того, небезопасно напрямую возвращать информацию о пользователе в браузер, и нет гарантии, что запрос на вход с помощью QR-кода инициируется через назначенное стороннее приложение. Стороннее приложение перенесет этот код авторизации на шаге 27, добавит AppId и AppSecret приложения, а затем инициирует запрос на вход на открытую платформу WeChat.Временный код авторизации можно использовать только один раз, и его нельзя использовать. снова после его сохранения.В указанном приложении (то есть привязанном к AppId) AppSecret извлекается приложением с сервера и используется для проверки подлинности приложения.Эти меры обеспечивают безопасность авторизованного входа WeChat. Однако после прохождения проверки информация о пользователе не возвращается напрямую, а возвращается токен доступа. Приложение может использовать этот токен для запроса интерфейса для получения информации о пользователе. Это связано с тем, что открытая платформа предоставляет множество интерфейсов, а доступ к этим интерфейсам требуется авторизация. Правильно, поэтому токен доступа выдается стороннему приложению. Этот метод авторизованного входа называется OAuth 2.0. Исходя из соображений безопасности, срок действия токена доступа относительно короткий, и открытая платформа обычно выдает токен обновления.После истечения срока действия токена доступа стороннее приложение может использовать токен обновления для обмена на новый токен доступа. , Если он истекает или пользователь отменяет авторизацию, новый токен доступа не может быть получен, и стороннее приложение должно выйти из логина пользователя в это время. Ни один из этих токенов не может быть утек, поэтому их необходимо хранить на стороне сервера сторонних приложений.

Вот интересный вопрос:Почему нет подписи стороннего приложения на URL-адресе страницы входа с QR-кодом WeChat?

Возьмите URL-адрес этой страницы QR-кода входа в WeChat в Geek Time в качестве примера:

open.WeChat.QQ.com/connect/ Но так...

appid — это идентификатор приложения, присвоенный Geek Time открытой платформой WeChat; redirect_uri — это URL-адрес Geek Time, который WeChat вызывает обратно после того, как пользователь авторизует вход в систему. . ; состояние — это идентификатор входа в систему, созданный Geek Time. В разных состояниях будут генерироваться разные QR-коды. Когда WeChat перезванивает Geek Time, он будет передавать это состояние.

В этом URL-адресе есть только приложение Geek Time, и нет подписи Geek Time, то есть WeChat сгенерирует QR-код для входа в Geek Time, но не проверяет, инициирован ли запрос на вход в QR-код. Geek Time, то любой может создать QR-кодовую страницу входа в WeChat для Geek Time. Это не кажется строгим.

Это безопасно? Злоумышленник может легко получить QR-код приложения для входа в WeChat, а затем обмануть авторизацию входа пользователя (это также относительно просто. Если вы создаете поддельный веб-сайт или можете обмануть пользователя напрямую, пользователь может не прочитать код тщательно. Подтвержденный контент), а затем получить временный код авторизации с помощью перехвата браузера или DNS-атаки и напрямую пропустить проверку состояния приложения. Предыдущие способы относительно просты. Однако при проверке временного кода авторизации в WeChat вы должны нести секрет приложения, что очень сложно, если только сторонний разработчик приложения сам не упустит этот основной секрет. Защита пользовательской информации, как правило, безопасна, и злоумышленники в основном не могут получить токен доступа для доступа к пользовательской информации. Если эта подпись добавлена ​​к URL-адресу, защита пользовательской информации не усиливается, а код авторизации по-прежнему легко получить, а подпись обычно зависит от секрета приложения. значение.

Что, если кто-то продолжит генерировать QR-код для входа в WeChat для приложения? Это другой тип атаки, WeChat может принимать некоторые текущие ограничительные меры или даже напрямую блокировать некоторые IP-адреса, что не влияет на обычных пользователей.

Варианты входа в WeChat по QR-коду

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

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


Вышеизложенное является основным содержанием этой статьи.Ввиду моего отсутствия таланта и знаний, если есть какие-либо ошибки или упущения, пожалуйста, поправьте меня.

Чтобы получить больше знаний об архитектуре, обратите внимание на публичный аккаунт Firefly Architecture. Оригинальное содержание, пожалуйста, указывайте источник при перепечатке.