Как добиться единого входа с несколькими учетными записями?

Java задняя часть

источник:www.dustyblog.cn

Почти большая частьAppОба поддерживают использование нескольких сторонних учетных записей для входа в систему, например: WeChat, QQ, Weibo и т. д. Мы называем это единым входом с несколькими учетными записями. Дизайн таблицы и дизайн процесса этих счетов очень важны, иначе последующее расширение будет плохим.

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

1. Самостоятельная система входа в систему

1.1.1 Регистрация входа по номеру мобильного телефона

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

Процесс:

  1. Сначала введите номер мобильного телефона, а затем отправьте его на сервер. Сначала определите, есть ли у номера мобильного телефона учетная запись, если нет, будет сгенерирован случайный код подтверждения, и номер мобильного телефона и код подтверждения будут привязаны кRedis, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS.
  2. После получения кода подтверждения пользователь заполняет основную информацию, такую ​​как код подтверждения и пароль, в интерфейсе, а затем отправляет данные на сервер. После того, как сервер получает его, он сначала оцениваетRedisЯвляется ли проверочный код, соответствующий номеру мобильного телефона, тем же самым, в случае неудачи он вернет код ошибки.Если это удастся, он создаст учетную запись и сохранит пароль для пользователя.
  3. После успешной регистрации пользователи могут手机号+密码чтобы залогиниться.

проблема:

  1. Пользовательский интерфейс плохой, вам необходимо завершить получение кода подтверждения, ввести код подтверждения/пароль/имя пользователя и много другой информации для завершения регистрации, а затем вы можете использовать его;
  2. Забыть пароль легко, после того, как вы его забыли, вы можете сбросить пароль, только забыв пароль.

1.1.2 Оптимизация регистрации и входа

Идея схемы заключается в том, чтобы ослабить обязательный характер пароля, то есть независимо от того, зарегистрировался пользователь или нет,手机号+验证码Войти напрямую (зарезервировано手机号+密码способ входа).

Процесс:

  1. Введите номер телефона и отправьте его на сервер. Сервер генерирует случайный проверочный код и привязывает номер мобильного телефона и проверочный код кRedis, и установите определенное время истечения срока действия (время истечения обычно составляет 5 минут, что является сроком действия нашего общего кода подтверждения мобильного телефона), и, наконец, отправьте код подтверждения пользователю через SMS.
  2. После того, как пользователь получит проверочный код, ему нужно только заполнить полученный проверочный код в интерфейсе и отправить его на сервер. После того, как сервер получает его, он сначала оцениваетRedisЯвляется ли проверочный код, соответствующий номеру мобильного телефона в нем, одинаковым, в случае неудачи он вернет код ошибки, а в случае успеха он войдет в систему напрямую. Если это старый пользователь, извлеките информацию о пользователе напрямую; если это новый пользователь, предложите ему улучшить информацию о пользователе (не обязательно).
  3. пользователь через手机号+验证码После входа в систему вы также можете установить пароль, а затем пройти手机号+密码логин, то есть пароль необязателен.

Дизайн пользовательской таблицы:

id user_name user_password user_mobile state more
Идентификатор пользователя имя пользователя пользовательский пароль номер мобильного телефона Статус аккаунта другая информация

1.2 Представляем стороннее решение для учетной записи

1.2.1 Вход в Weibo

ВходитьWeb2.0В то время Weibo открыла сторонний веб-сайт для входа в систему. Продукт сказал, что он должен быть у нас, и мы можем войти в нашу учетную запись Weibo, добавив учетную запись Weibo.AppНу, и он должен быть связан с нашей собственной пользовательской таблицей.

Процесс:

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

Дизайн таблицы с информацией о пользователе Weibo:

id user_id uid access_token
идентификатор первичного ключа Идентификатор пользователя уникальный идентификатор Weibo Код авторизации

1.2.2 Кошмар грядет

Сразу после этого QQ открыл пользователей для входа в систему, WeChat открыл пользователей для входа, а разработчики NetEase вошли в систему. . . . . . Если вы хотите получить доступ сразу ко многим сторонним логинам, вы можете только создать новую таблицу в соответствии с «Таблицей информации о пользователе Weibo» и переписать набор сторонних логинов.

2. Оптимизируйте систему аккаунтов

2.1 Анализ исходной системы учетной записи

  1. Самостоятельная система входа в систему: неважно手机号+密码, все еще手机号+验证码, является своего рода用户信息+密码Форма проверки;
  2. Сторонний вход: также用户信息+密码В виде пользовательской информации, которая хранится в сторонней системеID(уникальный идентификатор в сторонней системе), парольaccess_token, это просто пароль, который периодически меняется с датой истечения срока действия.

2.2 Новая система учетных записей

2.2.1 Дизайн таблицы данных

Таблица основных сведений о пользователе:

id nickname avatar more
Идентификатор пользователя Никнейм Аватар другая информация

Таблица информации об авторизации пользователя:

id user_id identity_type identifier credential
идентификатор первичного ключа Идентификатор пользователя Тип входа (номер мобильного телефона/электронная почта) или имя стороннего приложения (WeChat/Weibo и т. д.) Номер мобильного телефона/электронная почта/уникальный идентификатор третьего лица Сертификат пароля (сохраните пароль для самостоятельно созданной учетной записи, сохраните токен для третьей стороны)

инструкция:

  1. Пользовательская таблица разделена на用户基础信息表 + 用户授权信息表;
  2. Форма информации о пользователе не сохраняет никаких паролей, не сохраняет никаких данных для входа (таких как имя пользователя, номер мобильного телефона, электронная почта), сохраняет только основную информацию, такую ​​как псевдонимы и аватары; все, что связано с авторизацией, размещается в информации о пользователе форма авторизации,Таблица информации о пользователе и таблица авторизации пользователя имеют отношение «один ко многим»..

2.2.2 Процесс входа в систему

  • 手机号+验证码

Следуйте предыдущему плану.

  • 邮箱/手机号+密码:

Пользователь заполняет邮箱/手机号+密码; При запросе на вход сначала определите тип, например, логин по номеру мобильного телефона:

использоватьtype='phone'комбинироватьidentifier='手机号'Найдите, если есть, вынесите и рассудитеpassword_hash(пароль) совпадает с записьюcredentialсоответствует, пройти проверку, если совпадает, то пройтиuser_idПолучить информацию о пользователе;

  • Сторонний логин, например WeChat:

Запросtype='weixin'комбинироватьidentifier='微信 openId', если есть запись, войдите напрямую и обновитеtoken; Предполагая, что связь с сервером WeChat не перехвачена, нет необходимости судить о проблеме с учетными данными.

2.2.3 Преимущества и недостатки

преимущество:

  1. Типы входа бесконечно расширяются, а стоимость разработки новых типов входа значительно снижается;
  2. В исходных условиях приложению необходимо проверить, был ли подтвержден номер мобильного телефона и адрес электронной почты, а также соответствующее поле, напримерphone_verifiedиemail_verified, теперь пока用户授权信息表добавить единыйverifiedполе, каждый метод входа может визуально видеть, был ли он проверен;
  3. существует用户授权信息表Добавьте соответствующее время иIPадрес, можно более полно отследить привычки использования пользователя, например: он не использовал Weibo для входа более двух лет, а привязан к WeChat 300 дней;
  4. Если вы говорите, что адрес электронной почты и номер мобильного телефона являются частью информации о пользователе, хотя таблица пользователей расширена, в таблице пользователей все еще есть электронная почта и телефон, но они используются только для «целей отображения», и есть нет существенной разницы с такими атрибутами, как никнейм, аватар или пол;
  5. При необходимости можно привязать любое количество методов входа одного типа, то есть пользователь может привязать несколько WeChat, несколько почтовых ящиков и несколько номеров мобильных телефонов. Конечно, вы также можете ограничить метод входа в систему только одной записью;

недостаток :

  1. Если у пользователя есть несколько способов входа в систему, таких как электронная почта, имя пользователя, номер мобильного телефона и т. д., пароль необходимо изменить вместе, иначе он станет邮箱+新密码, 手机号+旧密码может войти, должно быть очень странная ситуация;

  2. Количество кода увеличилось, а в некоторых случаях увеличилось логическое суждение и возросла сложность; например, вошел ли пользователь в систему или нет, зарегистрировался пользователь или нет, щелкните ту же ссылку, чтобы перейти на Weibo после сторонней авторизации и возврата, может возникнуть несколько ситуаций:

Weibo не был зарегистрирован на этом сайте, это очень хорошо, зарегистрируйте его напрямую и войдите в систему;

Weibo уже существует на этом сайте, текущий пользователь не вошел в систему, и прямой вход выполнен успешно;

Учетная запись Weibo не зарегистрирована на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo.Что делать, зависит от того, разрешено ли привязывать несколько учетных записей Weibo;

Weibo не был зарегистрирован на этом сайте, и текущий пользователь вошел в систему, пытаясь выполнить привязку;

Вейбо зарегистрирован, и пользователь авторизовался с этой учетной записью, почему он повторно привязывается;

Этот Weibo уже существует на этом сайте, но текущий пользователь вошел в систему и связан с другой учетной записью Weibo, что мне делать?

3. Вход в один клик

3.1 Предыстория

оглядываться手机号+验证码метод входа:

  1. Введите номер мобильного телефона, дождитесь SMS с кодом подтверждения, введите код подтверждения и нажмите Войти. Для завершения всего процесса может потребоваться более 20 секунд, и операция относительно громоздка;
  2. Он зависит от сети SMS, потому что, если вы не можете получить текстовое сообщение, вы не можете войти в систему.
  3. С точки зрения безопасности также существует риск утечки проверочного кода. Если кто-то узнает ваш номер телефона и украдет код подтверждения, он также сможет войти в вашу учетную запись.

Но оглядываясь назад, зачем нам капча? Функция кода подтверждения состоит в том, чтобы подтвердить, что номер мобильного телефона принадлежит вам.Кроме использования SMS, существует ли другой способ аутентификации номера мобильного телефона?

  1. Если текущий номер мобильного телефона может быть получен, номер, введенный пользователем, может быть проверен. Однако из соображений безопасности клиент не может получить номер мобильного телефона напрямую, и оператор может получить номер мобильного телефона черезSIMДанные карты в запрос.
  2. Теперь, когда оператор открыл соответствующие возможности, мы теперь можем судить о том, соответствует ли номер мобильного телефона, введенный пользователем, местному номеру, вызывая интерфейс оператора после того, как пользователь вводит номер мобильного телефона. Таким образом, пользователь сохраняет процесс ожидания SMS-сообщения с кодом подтверждения и ввода кода подтверждения, а также не ограничивается сетью SMS-сообщений, что упрощает процесс входа в систему.
  3. Но если подумать дальше, то если оператор может напрямую вернуть нам текущий номер, а не только для проверки, то пользователю даже не нужно заполнять номер мобильного телефона.

Это главный герой раздела:Вход в один клик.

3.2 Сертификация номера

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

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

Основные шаги заключаются в следующем:

  1. Инициализация SDK: вызовите метод инициализации SDK и передайте AppKey и AppSecret проекта на платформе.
  2. Вызов страницы авторизации: вызовите SDK, чтобы вызвать интерфейс авторизации. Сначала SDK инициирует запрос оператору на получение кода подтверждения номера мобильного телефона, а после успешного выполнения запроса переходит на страницу авторизации. На странице авторизации отобразится маска номера мобильного телефона и соглашение с оператором, которое пользователь должен подтвердить.
  3. Согласитесь с авторизацией и войдите в систему: пользователь соглашается с соответствующим соглашением, нажимает кнопку входа на странице авторизации, SDK запросит токен для получения этого номера и вернет токен клиенту после успешного запроса.
  4. Возьмем число: приобретенный токен отправляется на наш собственный сервер, сервер несет токен в журнале ключевого оператора интерфейса вызова, звонок успешен, возвращается номер телефона. Войдите или зарегистрируйтесь на сервере, используя номер мобильного телефона, отправьте результат работы клиенту, ключ для завершения входа.

4. Резюме

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

Рекомендуемые последние горячие статьи:

1.Более 1000 вопросов и ответов на собеседовании по Java (последняя версия 2021 г.)

2.Не используйте экран if/else, полный экранов, попробуйте режим стратегии, это вкусно! !

3.Какого черта! Каков новый синтаксис для xx ≠ null в Java?

4.Spring Boot 2.5 выпущен, а темный режим слишком жареный!

5.«Руководство по разработке Java (издание Lushan)», последняя версия, быстрая загрузка!

Если вы считаете, что это хорошо, не забудьте поставить лайк + ретвитнуть!