Сергей Лихобабин (Mail.Ru Group)
Зачем нужна кроссдоменная авторизация. Как это работает. Используем Oauth и пишем свою реализацию Single-sign-on для django. Примеры использования на внутренних проектах Mail.ru Group.
Кроссдоменная аутентификация на DjangoЛихобабин Сергей
View Slide
Зачем это нужно?
Пароли – это плохо!
Пользователи не любят пароли
Разработчики не любят пароли
Количество паролей и мест,требующих их ввода нужноминимизировать
OAuth
АутентификацияvsАвторизация
Вот это поворот!
Как это работает?
Id клиента,TimestampКлиентПользовательСервер
Токен,Общий секретКлиентПользовательСервер
ТокенКлиентПользовательСерверТокен,Аутентификационныеданные
Токен,Код подтвержденияКлиентПользовательСервер
Токен,Код подтверждения,Id клиента,TimestampКлиентПользовательСервер
Новый токен,Общий секретКлиентПользовательСервер
• Используется повсюду• Есть готовые решения(django-social-auth)
• Проектировался для других целей• Сложно реализовать клиент, если нетготового модуля• Не всегда есть возможность обращатьсяк внешним сервисам
CAS(Central authentication service)
ПользовательCAS-Сервер Клиент
CAS-Сервер КлиентПользовательSecurity-token
ПользовательSecurity-tokenCAS-Сервер Клиент
ПользовательПодтверждениеCAS-Сервер Клиент
• Поддерживается готовымипродуктами (например jenkins)• Механизм прокси-авторизации• Есть реализации провайдера иклиента для django (django-cas2)
Но что если CAS тоже не устраивает?
Пишем собственную реализацию
Id клиентаКлиентПользовательСервер
Request-tokenКлиентПользовательСервер
Request-token,Auth-tokenКлиентПользовательСервер
Id клиента,Auth-tokenКлиентПользовательСервер
Данные пользователяКлиентПользовательСервер
Где-то я это уже видел…
Добавить по вкусу• Single-sign-out• Proxy-авторизация• Красивости, например, кастомныестраницы логина для разных сервисов
• Возможность изменять способаутентификации• Больше не нужно вводить пароль много раз• Single-sign-out
Вопросы?