Вход в систему — важная функция, которую будет использовать каждый веб-сайт, но как реализовать отличную функцию входа и как выбрать схему входа, которая подходит вам в соответствии с вашим собственным проектом? Сегодня мы представим несколько распространенных схем входа в систему.
- Файл cookie + вход в сеанс
- Вход по токену
- Единый вход SSO
- Сторонний вход OAuth
1. Куки + вход в сессию
HTTP является протоколом без сохранения состояния, каждый раз, когда клиент отправляет запрос, и первый сервер устанавливает соединение, а затем отключается, запрос на соединение завершается. Это может сэкономить ресурс соединения, занятый передачей, но также есть проблема: каждый запрос независим, сервер не может определить этот запрос и запрос от одного и того же пользователя, и, следовательно, он не может определить статус входа пользователя.
Чтобы решить проблему безгражданства HTTP, Лу Монтулли ввел файлы cookie в 1994 году. Файл cookie — это специальная информация, отправляемая сервером клиенту.Эта информация хранится в клиенте в виде текста, и клиент будет передавать эту специальную информацию каждый раз, когда отправляет запрос на сервер.
В системе B/S функция входа в систему обычно основана наCookie
быть реализованным. Когда пользователь входит в систему успешно, статус входа обычно записывается вSession
середина. Чтобы реализовать проверку данных для входа клиента на стороне сервера, необходимо сохранить некоторую информацию на стороне клиента (SessionId
) и требовать от клиента выполнять их при каждом последующем запросе. В таком случае используйтеCookie
несомненно, самый удобный, поэтому мы обычно используемSession
изId
СохранитьCookie
, когда сервер получает запрос, он проходит проверкуCookie
чтобы определить, вошел ли пользователь в систему или нет.
Процесс реализации Cookie + Session
Cookie
+ Session
Метод входа в систему в настоящее время является наиболее классическим методом входа в систему, и он до сих пор используется большим количеством предприятий.
Когда пользователь входит в систему в первый раз:
- Доступ пользователя
a.com/pageA
, и введите свой пароль для входа. - После того, как сервер проверит правильность пароля, он создаст
SessionId
и сохраните его. - Сервер отвечает на этот HTTP-запрос с помощью
Set-Cookie
информация заголовка, будетSessionId
записыватьCookie
середина.
серверная часть
SessionId
Может храниться во многих местах, таких как: память, файлы, базы данных и т. д.
После завершения первого входа в систему последующие посещения могут использоваться напрямую.Cookie
Аутентифицировано:
- Доступ пользователя
a.com/pageB
Когда страница отображается, она автоматически содержит данные, записанные при первом входе в систему.Cookie
. - сравнение на стороне сервера
Cookie
серединаSessionId
и сохраняется на стороне сервераSessionId
Является ли это последовательным. - Если он непротиворечив, аутентификация прошла успешно и доступ к странице открыт; если он недействителен, пользователю необходимо снова войти в систему.
резюме
Хотя мы можем использоватьCookie
+ Session
Способ завершить проверку входа, но есть еще некоторые проблемы:
- Поскольку стороне сервера необходимо подключаться к большому количеству клиентов, ей также необходимо хранить большое количество
SessionId
, что вызовет чрезмерную нагрузку на сервер. - Если серверная часть представляет собой кластер, для синхронизации состояния входа в систему необходимо
SessionId
Синхронизация с каждой машиной фактически увеличивает затраты на обслуживание на стороне сервера. - из-за
SessionId
вставитьCookie
, так что это неизбежноCSRF
атака.
2. Вход по токену
чтобы решитьCookie
+ Session
Многие проблемы, выявленные механизмом, мы можем использоватьToken
способ входа.
Токен — это строка строк, сгенерированных сервером в качестве токена, запрошенного клиентом. При первом входе в систему сервер сгенерирует токен и вернет его клиенту.При последующем доступе клиенту ему нужно будет только принести этот токен для завершения аутентификации.
Процесс реализации механизма токенов
Когда пользователь входит в систему в первый раз:
- Доступ пользователя
a.com/pageA
, введите пароль учетной записи и нажмите Войти. - Сторона сервера проверяет правильность пароля учетной записи, создает
Token
. - Сервер будет
Token
возвращена клиенту черезСвобода сохранения клиента.
При последующих посещениях страницы:
- Доступ пользователя
a.com/pageB
, привести информацию полученную при первом входеToken
. - Проверка на стороне сервера
Token
, если он действителен, аутентификация прошла успешно; если он недействителен, он вернется для повторного входа в систему.
Метод генерации токена
наиболее общийToken
Создано с использованиемJWT
(Json Web Token
), который представляет собой лаконичный автономный метод безопасной передачи информации в виде объектов JSON между взаимодействующими сторонами.
использоватьToken
, серверная часть не хранитToken
Которые определяют, как клиент отправил мнеToken
Является ли это законным и действительным?
Ответ на самом делеToken
строка, на самом делеToken
Это не цепочка беспорядочных цепочек, а цепочка, собранная и объединенная с помощью различных алгоритмов.
JWT
Алгоритм в основном делится на 3 части:header
(информация заголовка),playload
(тело сообщения),signature
(подписать).
-
header
часть определяетJWT
используемый алгоритм подписи; -
playload
части шоуJWT
цель; -
signature
частьJWT
подпись, в основном, чтобы позволитьJWT
В него нельзя вмешиваться по своему желанию.
оJWT
, вот краткое описание, можно перейти к конкретным деталямофициальный сайт ДВТ.
резюме
Согласно приведенному выше случаю, мы можем проанализироватьToken
Преимущества и недостатки:
- Нет необходимости хранить на стороне сервера
Token
, так что это не будет давить на серверную часть, даже если это кластер серверов, нет необходимости увеличивать стоимость обслуживания. -
Token
Его можно хранить где угодно во внешнем интерфейсе, не сохраняя его вCookie
, что повышает безопасность страницы. -
Token
После того, как он выдан, он будет действителен до тех пор, пока он действует, но если сервер захочет отозвать этоToken
разрешения непростые.
имеютToken
После этого метод входа в систему стал очень эффективным.
3. Единый вход SSO
Единый вход означает, что в системах с несколькими приложениями на одной и той же платформе учетной записи пользователям необходимо войти в систему только один раз, чтобы получить доступ ко всем взаимно доверенным системам приложений. Суть в том, чтобы разделить состояние входа в систему между несколькими прикладными системами. Например, Baidu Tieba и Baidu Map — это две разные прикладные системы компании Baidu.Если пользователь вошел в Baidu Tieba, ему не нужно снова входить в систему при доступе к Baidu Map, то это означает, что существует разница между Baidu Tieba и Baidu Map Реализован единый вход.
Процесс внедрения механизма SSO
Когда пользователи получают доступ в первый раз, им необходимо войти в центр аутентификации:
- Пользователь заходит на сайт
a.com
внизpageA
страница. - Поскольку логина нет, он будет перенаправлен в центр аутентификации с адресом обратного вызова.
www.sso.com?return_uri=a.com/pageA
, так что вы можете сразу войти на соответствующую страницу после входа в систему. - Пользователь вводит пароль учетной записи в центре аутентификации и отправляет логин.
- Центр аутентификации проверяет правильность пароля учетной записи, а затем перенаправляет
a.com?ticket=123
Принесите код авторизацииticket
, и поставить удостоверяющий центрsso.com
статус входа написатьCookie
. - существует
a.com
сервер, холдингticket
Подтвердить в удостоверяющем центре код авторизацииticket
Реально и эффективно. - После успешной аутентификации сервер записывает информацию для входа в
Cookie
(На данный момент у клиента есть 2Cookie
существуют отдельноa.com
а такжеsso.com
статус входа).
После завершения входа в центр аутентификации продолжайте посещатьa.com
Другие страницы под:
В это время из-заa.com
Есть авторизованныйCookie
информации, поэтому прямая аутентификация на стороне сервера проходит успешно.
Если вход в центр аутентификации завершен, доступb.com
страница ниже:
В настоящее время, поскольку центр аутентификации ранее вошел в системуCookie
, поэтому вам не нужно снова вводить пароль учетной записи, вернитесь к шагу 4 и отправьтеticket
Датьb.com
Вот и все.
Реализация механизма SSO
Существует три основных способа реализации единого входа:
- Файлы cookie родительского домена
- Удостоверяющий центр
- Кросс-доменное LocalStorage
При нормальных обстоятельствах статус входа пользователя записывается вSession
Чтобы достичь общего состояния входа в систему, вы должны сначала поделитьсяSession
, но так как разные системы приложений имеют разные доменные имена, хотяSession
общий, но из-заSessionId
часто сохраняется в браузереCookie
, поэтому существует ограничение области действия, и его нельзя передавать между доменными именами, то есть, когда пользователь находится вa.com
После входа в системуSession Id
Доступ только через браузерa.com
будет автоматически переноситься в заголовок запроса, и когда браузер обращается кb.com
час,Session Id
не возьмут. Ключ к реализации единой регистрации заключается в том, как сделатьSession Id
(или токен), общий для нескольких доменов.
1. Печенье родительского домена
Cookie
Объем определяетсяdomain
свойства иpath
свойства определяются совместно.domain
Допустимыми значениями атрибута являются доменное имя/IP-адрес текущего домена или его родительского домена в Tomcat,domain
Свойство по умолчанию соответствует доменному имени/IP-адресу текущего домена.path
Допустимые значения свойства: "/
«Путь начинается в Томкэте,path
По умолчанию свойство соответствует текущему контекстному пути веб-приложения.
еслиCookie
изdomain
свойство установлено в родительский домен текущего домена, тогда он считается родительским доменомCookie
.Cookie
Есть особенность, что родительский доменCookie
Разделяется субдоменом, то есть субдомен автоматически наследуетCookie
.
использоватьCookie
Эта особенностьSession Id
(илиToken
) можно сохранить в родительском домене. нам просто нужноCookie
изdomain
свойство установлено в доменное имя родительского домена (имя основного домена), в то время какCookie
изpath
Для свойства задан корневой путь, чтобы все приложения поддоменов могли получить к нему доступ.Cookie
. Однако для этого требуется, чтобы доменное имя прикладной системы было установлено под общим основным доменным именем, таким как tieba.baidu.com и map.baidu.com, оба из которых установлены под основным доменным именем baidu. com, то они могут использовать этот способ достижения единого входа.
Резюме: эта реализация относительно проста, но не поддерживает перекрестные первичные доменные имена.
2. Центр сертификации
Мы можем развернуть центр сертификации, который представляет собой независимую веб-службу, предназначенную для обработки запросов на вход.
Пользователь входит в центр аутентификации унифицированным способом.После успешного входа центр аутентификации записывает статус входа пользователя и записывает статус входа пользователя.Token
записыватьCookie
. (注意这个Cookie
Это сертификационный центр, применение системы недоступна)
Система приложения проверяет, имеет ли текущий запросToken
, если нет, это означает, что пользователь не вошел в текущую систему, затем перейдите на страницу в центр аутентификации, чтобы войти. Поскольку эта операция будетCookie
автоматически берется на себя, так что центр сертификации можетCookie
Знайте, если пользователь уже вошел в систему. Если центр аутентификации обнаружит, что пользователь не вошел в систему, он вернется на страницу входа и будет ждать, пока пользователь войдет в систему. Если он обнаружит, что пользователь уже вошел в систему, он не позволит пользователю снова войти в систему, но вернется к целевому URL-адресу и сгенерирует URL-адрес перед переходом.Token
, вставленный после целевого URL-адреса и отправленный обратно в целевую систему приложений.
система приложений для полученияToken
После этого необходимо подтвердить в удостоверяющем центреToken
законность для предотвращения подделки пользователей. После подтверждения прикладная система записывает статус входа пользователя в систему и записывает статус входа пользователя.Token
записыватьCookie
, а затем разрешите посещение. (этоCookie
Он принадлежит текущей системе приложений, и другие системы приложений не могут получить к нему доступ) Когда пользователь снова обращается к текущей системе приложений, он автоматически выводит этоToken
, проверка системы приложенийToken
Обнаружено, что пользователь вошел в систему, поэтому центра аутентификации не будет.
Резюме: эта реализация относительно сложна, поддерживает междоменные связи и обладает хорошей масштабируемостью, что является стандартной практикой для единого входа.
3. Междоменное хранилище LocalStorage
Ключ к единому входу в том, как сделатьSession Id
(илиToken
) совместно используется несколькими доменами. ноCookie
Перекрестное основное доменное имя не поддерживается, и браузер не поддерживаетCookie
Ограничения кросс-домена получают более строгих.
В случае разделения передней и задней части он полностью не используется.Cookie
, мы можем выбратьSession Id
(илиToken
) сохраняется в браузереLocalStorage
, пусть клиентский интерфейс активно отправляет запрос серверной части каждый раз, когда он отправляет запросLocalStorage
данные передаются на сервер. Все они контролируются внешним интерфейсом, а серверная часть должна делать это только после того, как пользователь успешно войдет в систему.Session Id
(илиToken
) В ответ передается на переднюю часть кузова.
В таком сценарии единый вход может быть полностью реализован на внешнем интерфейсе. внешний интерфейсSession Id
(илиToken
), в дополнение к записи его в свой собственныйLocalStorage
В дополнение к , он также может быть записан в несколько других доменов специальными средствами.LocalStorage
середина.
Резюме: Эта реализация полностью контролируется внешним интерфейсом, почти не требует участия внутреннего интерфейса, а также поддерживает междоменное взаимодействие.
Выход из системы единого входа
В настоящее время мы завершили единый вход. Под управлением одного и того же набора центров аутентификации несколько продуктов могут использовать одно и то же состояние входа. Теперь нам нужно рассмотреть выход из системы, то есть: если один продукт вышел из системы, как другие продукты также могут выйти из системы?
Принцип на самом деле не сложный, это можно проверить в сертификационном центре в каждом товареticket(token)
На самом деле, вы можете выйти из своего собственногоapi
направляется в удостоверяющий центр.
когда продуктc.com
При выходе из системы:
- пустой
c.com
войти в системуCookie
. - Запрос центра сертификации
sso.com
выход вapi
. - Удостоверяющий центр прошел и выдал
ticket(token)
всех продуктов и вызвать соответствующий выходapi
, завершите выход.
В-четвертых, сторонний вход OAuth
Сторонние методы входа OAuth обычно используют следующие три метода:
Процесс реализации механизма OAuth
Вот пример процесса доступа к открытой платформе WeChat:
- первый,
a.com
Оператору компании необходимо зарегистрировать учетную запись на открытой платформе WeChat и подать заявку в WeChat, чтобы использовать функцию входа в WeChat. - После успешного применения приложение
appid
,appsecret
. - пользователь в
a.com
Выберите вход с помощью WeChat. - В это время он перейдет к логину авторизации OAuth WeChat и принесет его с
a.com
адрес обратного звонка. - Пользователь вводит учетную запись WeChat и пароль, и после успешного входа в систему ему необходимо выбрать конкретную область авторизации, такую как аватар авторизованного пользователя, псевдоним и т. д.
- После авторизации WeChat подтянется по
a.com?code=123
, с временным билетомcode
. - Получать
code
Позже,a.com
возьметcode
,appid
,appsecret
, подать заявку на сервер WeChattoken
, после успешной проверки WeChat отправитtoken
. - имеют
token
Позже,a.com
можно положиться наtoken
Получите соответствующий аватар пользователя WeChat, псевдоним пользователя и другую информацию. -
a.com
Предложите пользователю успешно войти в систему и запишите статус входа вCookie
, в качестве учетных данных для последующего доступа.
Способы доступа других платформ можно посмотреть в соответствующих официальных документах, и процесс в основном аналогичен.
Суммировать
Вышеупомянутые четыре схемы реализации входа в систему в основном включают существующие схемы проверки входа в систему, и принципы и процессы реализации в основном понятны.
-
Cookie + Session
Он имеет долгую историю и подходит для простых серверных архитектур, требующих, чтобы разработчики самостоятельно справлялись с проблемами безопасности. -
Token
Раствор имеет небольшое давление на спине и подходит для широкомасштабной распределенной задней части архитектуры, но распределенныеtoken
, если вы хотите отозвать разрешения, это не очень удобно. - Единый вход SSO подходит для средних и крупных предприятий, которые хотят унифицировать методы входа для всех внутренних продуктов.
- Сторонний вход OAuth, простой в использовании, удобный для пользователей и разработчиков, но существует множество сторонних платформ, вам нужно выбрать подходящую стороннюю платформу для входа.
Справочная статья:блог cn на.com/eternal/… Tickets.WeChat.QQ.com/Yes/Green Grass 6TP X…