Как правильно использовать HTTP (S) auth (REMOTE_AUTH) в django? - PullRequest
0 голосов
/ 09 февраля 2011

Я на этапе планирования нового проекта.Я хочу иметь возможность управлять несколькими реле с моего телефона на платформе Android через Интернет.Мне нужно использовать HTTP-сервер в качестве посредника между телефоном и реле.Django - моя любимая платформа, потому что Python - мой самый сильный набор навыков.Это не было бы «веб-приложением» (за исключением интерфейса администратора для управления пользователями и их доступом к реле).Скорее сервер просто предоставил бы API в форме запросов HTTPS и кодировки JSON.Тем не менее, я должен отметить, что я никогда не занимался веб-разработкой в ​​своей жизни, поэтому я не знаю лучших практик (пока).Метод аутентификации должен соответствовать следующим критериям:

  • Работает по HTTPS (самозаверяющий SSL)
  • Обеспечивает многофакторную аутентификацию (в форме того, что у вас есть, и того, что вы знаете)
  • Быть достаточно безопасным (было бы очень трудно обмануть, догадаться или каким-либо иным образом обойти)
  • Прост в реализации для оператора сервера и конечного пользователя на мобильном клиенте
  • Облегчен с точки зрения как циклов ЦП, так и пропускной способности

    Я планирую использовать следующую схему для решения этой проблемы:

    1. Администратор входит в веб-интерфейс,создает пользователя и устанавливает его / ее разрешения (включая имя пользователя и пароль, выбранные пользователем).
    2. Пользователь запускает клиента, выбирает сервер добавления и вводит URL-адрес сервера и его / ее учетные данные.
    3. Клиент пытается аутентифицировать пользователя через HTTP-аутентификацию (через SSL).Если аутентификация прошла успешно, сервер сгенерирует ключ API в форме UUID и отправит его клиенту.Клиент сохранит этот ключ и будет использовать его во всех вызовах API через HTTPS.HTTP-аутентификация используется только для начального процесса аутентификации до восстановления ключа, так как схема сеанса не была бы необходимой для этого приложения.Правильно?Клиент будет работать только в том случае, если телефон настроен на автоматическую блокировку с помощью PIN-кода или шаблона после короткого времени ожидания.Сервер разрешит генерировать только один ключ для каждого пользователя, если только администратор не сбросит ключ.Следовательно, простая, мобильная, многофакторная аутентификация.

Это звук с точки зрения безопасности?Кроме того, кто-нибудь может привести мне пример использования HTTP-аутентификации, встроенной в Django?Из поиска в Google я могу найти множество фрагментов, которые взломали эту функцию вместе.Но никто из них не реализует HTTP-аутентификацию так, как был добавлен в Django в 1.1 . Официальную документацию для REMOTE_AUTH можно найти здесь , но у меня возникают трудности с пониманием документации, так как я очень новичок в Django.

1 Ответ

2 голосов
/ 09 февраля 2011

Я не совсем уверен, как базовая аутентификация будет работать на Django, но я могу сделать снимок.

В статье Basic Auth в Википедии описан довольно стандартный сценарий использования для входа в систему. Для Android я лично пропустил первую часть (401) и сразу же передал свои учетные данные.

С вашим запросом авторизации вам нужно будет просто получить учетные данные пользователя из заголовков запроса (WWW-Authenticate), а затем выполнить всю необходимую для этого работу. С учетными данными вы можете просто использовать инфраструктуру аутентификации, предоставленную в Django, чтобы убедиться, что пользователь затем сгенерирует свой UUID (я полагаю).

Что касается базовой аутентификации на Android, сначала она немного сложна и может привести к потере волос. Я нашел эту статью о базовой аутентификации HTTP для Android , которая помогает объяснить, как это сделать.

Что касается безопасности, я не слишком уверен. Это довольно просто, и я бы сказал, что это хорошо :)

...