Как сделать единый вход на разные сайты


Межсайтовая авторизация 2 / Хабр

По итогам поста, сделанного в июле 2009 и продолжительным испытаниям, мы пришли к простой и оптимальной для нас схеме межсайтовой авторизации.

Задача — организовать межсайтовую авторизацию между проектами, размещенными на разных доменах (site1.com, site2.com). Пользователь автризовавшись на одном проекте, получает авторизацию на всех (Single Sign On). Тоже самое с кнопкой выход (Single Sign Out). Доступ к хранилищу сессий и к базе есть у каждого проекта. На обоих проектах авторизация не обязательна.
Хочу подчеркнуть что вопросы регистрации, хранения и передачи пользовательских данных сейчас не обсуждаются, интересует только авторизация.

Задачу можно разделить на три основных части:

  1. Авторизация — пользователь ввел логин и пароль в форме.
  2. Автоматическая авторизация — пользователь нажал «запомнить меня», или уже авторизован на одном из проектов.
  3. Выход — пользователь нажал кнопку «выход».

Договоримся, что:
  • site.com — один из проектов.
  • sso.com — сервер общей авторизации.

Авторизация

Пользователь на site.com заполняет форму. Мы шифруем в одну строку (токен) и передаем редиректом на sso.com:
  • Логин.
  • Пароль.
  • «Запомнить меня».
  • url1 — адрес на который должны вернуться, если авторизация прошла успешно.
  • url2 — адрес на который мы переходим, если ошибка.
  • Текущее время — для проверки на устаревание токена.
sso.com принимает GET запрос, расшифровывает данные и проверяет время создания токена (не более 2 минут) и логин/пароль:
  • Логин/пароль верный: на sso.com создаем сессию и cтавим cookie. Сохраняем связь ID сессии и ID пользователя в базе. Делаем редирект на url1 с зашифрованными ID сессии и «запомнить меня». На site.com подцепляем сессию и ставим cookie.
  • Логин/пароль не верный: делаем редирект на url2.

Автоматическая авторизация

Пользователь заходит на site.com. Проверяем сессионную cookie:
  • Cессионная cookie есть: проверяем есть ли сессия
    • Сессия есть: пользователь авторизован!
    • Сессии нет: проверяем в базе есть ли связка ID сессии и ID пользователя:
      • Связка есть: поднимаем сессию и пользователь авторизован!
      • Связки нету: удаляем сессионную cookie на site.com.
  • Сессионной сookie нет: вставляем javascript файл c sso.com в начале страницы. Файл отдается PHP скриптом, который проверяет есть ли cookie на sso.com:
    • Cookie есть: проверяем поднята ли сессия
      • Сессия поднята: пишем в JS установку сессионной cookie и перезагрузку страницы на site.com. Пользователь авторизован!
      • Сессия не поднята: проверяем есть ли привязка ID сессии к ID пользователя
        • Cвязь есть: поднимаем сессию и возращаем в JS установку cookie и перезагрузку страницы на site.com. Пользователь авторизован!
        • Связи нет: удаляем cookie и возвращаем пустой JS.
    • Cookie нет: возвращаем пустой JS.

Выход

Пользователь на site.com жмет на кнопку «выход». Опускаем сессию, удаляем сессионную cookie и делаем редирект на sso.com с зашифрованным обратным адресом. sso.com удаляет сессионную cookie и связь ID сессии с ID пользователя в базе. Пользователь вышел!

Как вы понимаете это схема работает с любым количеством проектов. Пользователь авторизовавшись на одном из них, будет авторизован на всех. Тоже самое с кнопкой «выход».

Буду рад, если наш опыт будет вам полезен. Конструктивная критика приветствуется.

Update: Спасибо DileSoft и divedeep за ценные замечания, которые учел в этой схеме.

wordpress - единый вход в нескольких доменах

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование
.Аутентификация

- прозрачный сеанс пользователя на нескольких сайтах (единый вход + единый выход)

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Как работает система единого входа (SSO)?

Что такое единый вход?

Единый вход (SSO) - это свойство управления идентификацией и доступом (IAM), которое позволяет пользователям безопасно аутентифицироваться в нескольких приложениях и веб-сайтах, войдя в систему только один раз - с одним набором учетных данных (имя пользователя и пароль). При использовании единого входа приложение или веб-сайт, к которому пытается получить доступ пользователь, полагается на доверенную третью сторону для проверки того, что пользователи являются теми, кем они себя называют.

Как работает аутентификация без единого входа?

Без единой регистрации каждый веб-сайт поддерживает собственную базу данных пользователей и их учетных данных.Вот что происходит, когда вы пытаетесь войти в приложение или на веб-сайт:

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

Данные подтверждения аутентификации обычно передаются либо в виде файлов cookie с данными сеанса, либо в виде токенов, которые не отслеживают сеанс и обрабатываются быстрее.

Пользователь запрашивает доступ

Пользователю предоставляется доступ
, а затем он запрашивает доступ к новому сайту

Как работает SSO?

Аутентификация с помощью единого входа основана на доверительных отношениях между доменами (веб-сайтами). В случае единого входа при попытке войти в приложение или на веб-сайт происходит следующее:

  1. Веб-сайт сначала проверяет, прошли ли вы уже аутентификацию с помощью решения SSO, и в этом случае он дает вам доступ к сайту.
  2. Если вы этого не сделали, он отправит вас в систему единого входа для входа в систему.
  3. Вы вводите единое имя пользователя / пароль, который вы используете для корпоративного доступа.
  4. Решение SSO запрашивает аутентификацию у поставщика удостоверений или системы аутентификации, которую использует ваша компания. Он проверяет вашу личность и уведомляет решение SSO.
  5. Решение SSO передает данные аутентификации на веб-сайт и возвращает вас на этот сайт.
  6. После входа в систему сайт передает вам данные проверки подлинности, когда вы перемещаетесь по сайту, чтобы убедиться, что вы прошли аутентификацию каждый раз, когда вы переходите на новую страницу.

В системе единого входа данные проверки подлинности принимают форму токенов.

Пользователь запрашивает доступ

Веб-сайт перенаправляет пользователя на веб-сайт системы единого входа для входа в систему. Пользователь входит в систему с одним именем пользователя и паролем.

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

Пользователю предоставляется доступ
, а затем он запрашивает доступ к новому сайту

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

Что делает настоящую систему единого входа?

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

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

Что такое федеративный единый вход?

Решения

SSO, использующие федерацию, обеспечивают истинный единый вход, используя преимущества поставщика удостоверений (IP) организации, например Microsoft Active Directory (AD) или Azure Active Directory (Azure AD). Провайдер идентификации обычно действует как сервер аутентификации и хранит личность и информацию пользователя, такую ​​как имя пользователя, пароль, домены, к которым у пользователя есть доступ, и даже то, какие действия пользователю разрешено делать на каждом сайте или в каждом приложении.(Проверка действий, которые разрешено выполнять пользователю, называется авторизацией . Например, пользователь может иметь доступ к отчетам Salesforce, но может не иметь права редактировать записи клиентов.)

Для истинного единого входа либо решение единого входа встроено в поставщик удостоверений, либо решение единого входа использует одного или нескольких поставщиков удостоверений для аутентификации пользователя.

Запросы аутентификации и информация передаются с использованием стандартных безопасных протоколов, таких как SAML или OAuth. Веб-сайты, запрашивающие аутентификацию, имеют доверительные отношения с решением SSO, и между решением SSO и поставщиками удостоверений существуют доверительные отношения.Отношения доверия означает, что один домен доверяет информации другого о пользователях, устройствах и правах доступа.

.Аутентификация

- как реализовать единый вход для разных приложений ColdFusion, работающих на одном сервере?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Смотрите также

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Одноклассники
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий