Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Кроссдоменная авторизация на Django

Кроссдоменная авторизация на Django

Сергей Лихобабин (Mail.Ru Group)

Зачем нужна кроссдоменная авторизация. Как это работает. Используем Oauth и пишем свою реализацию Single-sign-on для django. Примеры использования на внутренних проектах Mail.ru Group.

Moscow Python Meetup
PRO

March 03, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Кроссдоменная аутентификация на Django
    Лихобабин Сергей

    View Slide

  2. Зачем это нужно?

    View Slide

  3. Пароли – это плохо!

    View Slide

  4. Пользователи не любят пароли

    View Slide

  5. Разработчики не любят пароли

    View Slide

  6. Количество паролей и мест,
    требующих их ввода нужно
    минимизировать

    View Slide

  7. View Slide

  8. OAuth

    View Slide

  9. Аутентификация
    vs
    Авторизация

    View Slide

  10. Вот это поворот!

    View Slide

  11. Как это работает?

    View Slide

  12. Id клиента,
    Timestamp
    Клиент
    Пользователь
    Сервер

    View Slide

  13. Токен,
    Общий секрет
    Клиент
    Пользователь
    Сервер

    View Slide

  14. Токен
    Клиент
    Пользователь
    Сервер
    Токен,
    Аутентификационные
    данные

    View Slide

  15. Токен,
    Код подтверждения
    Клиент
    Пользователь
    Сервер

    View Slide

  16. Токен,
    Код подтверждения,
    Id клиента,
    Timestamp
    Клиент
    Пользователь
    Сервер

    View Slide

  17. Новый токен,
    Общий секрет
    Клиент
    Пользователь
    Сервер

    View Slide

  18. • Используется повсюду
    • Есть готовые решения(django-social-auth)

    View Slide

  19. • Проектировался для других целей
    • Сложно реализовать клиент, если нет
    готового модуля
    • Не всегда есть возможность обращаться
    к внешним сервисам

    View Slide

  20. CAS
    (Central authentication service)

    View Slide

  21. Пользователь
    CAS-Сервер Клиент

    View Slide

  22. CAS-Сервер Клиент
    Пользователь
    Security-token

    View Slide

  23. Пользователь
    Security-token
    CAS-Сервер Клиент

    View Slide

  24. Пользователь
    Подтверждение
    CAS-Сервер Клиент

    View Slide

  25. • Поддерживается готовыми
    продуктами (например jenkins)
    • Механизм прокси-авторизации
    • Есть реализации провайдера и
    клиента для django (django-cas2)

    View Slide

  26. Но что если CAS тоже не устраивает?

    View Slide

  27. Пишем собственную реализацию

    View Slide

  28. Id клиента
    Клиент
    Пользователь
    Сервер

    View Slide

  29. Request-token
    Клиент
    Пользователь
    Сервер

    View Slide

  30. Request-token
    Клиент
    Пользователь
    Сервер

    View Slide

  31. Request-token,
    Auth-token
    Клиент
    Пользователь
    Сервер

    View Slide

  32. Id клиента,
    Auth-token
    Клиент
    Пользователь
    Сервер

    View Slide

  33. Данные пользователя
    Клиент
    Пользователь
    Сервер

    View Slide

  34. Где-то я это уже видел…

    View Slide

  35. Добавить по вкусу
    • Single-sign-out
    • Proxy-авторизация
    • Красивости, например, кастомные
    страницы логина для разных сервисов

    View Slide

  36. • Возможность изменять способ
    аутентификации
    • Больше не нужно вводить пароль много раз
    • Single-sign-out

    View Slide

  37. Вопросы?

    View Slide