Я использую Django v1.8 и django-rest-framework v3.2.2. У меня есть сайт с API с открытым доступом, который также используется моим собственным сайтом (в том же домене), что и Ajax-back-end для приложения JavaScript, используя только GET.Понимание SessionAuthentication в django-rest-framework?
Я хочу, чтобы публичные пользователи этого API запрашивали параметр key
в URL-адресе, который я буду выдавать вручную. Но я также хочу, чтобы мое приложение JavaScript могло использовать API, таким образом, что другие пользователи не могут просто украсть ключ и использовать его.
Я установил свою собственную аутентификацию ключа as described here, и он работает хорошо.
Однако я не понимаю, как приложение JavaScript должно использовать API. Очевидно, я мог бы просто передать выделенный URL-адрес key
в URL-адресе, но тогда другие пользователи тривиально не смогут определить ключ и использовать его?
Мне кажется, мне нужна SessionAuthentication, но как я могу начать эту работу? Я не вижу никаких указаний in the DRF documentation о том, как мне нужно изменить свои вызовы JavaScript, чтобы использовать его.
Также я не понимаю, как SessionAuthentication позволяет приложению Ajax аутентифицироваться без возможности просмотра и копирования подлинности других пользователей.
Очень благодарен за любые советы.
Обычно вы передаете токен key/auth в заголовке авторизации не в URL-адресе. Аутентификация сеанса используется, когда вы используете учетную запись django по умолчанию, после этого вы также должны быть аутентифицированы для доступа к api, вам нужно будет добавить аутентификацию сеанса для настройки остальной среды. –
Вы можете использовать либо аутентификацию сеанса, либо аутентификацию по токену, либо и то, и другое. Однако, как отметил @PieterHamman, пользователю необходимо пройти аутентификацию, чтобы иметь возможность использовать API. После аутентификации пользователю необходимо передать session_id/токен в каждом заголовке запроса. Для сравнения между сеансом и токеном auth см. Http://security.stackexchange.com/questions/81756/session-authentication-vs-token-authentication. Вы также можете проверить django-rest-framework-jwt, который представляет собой пакет для drf, который реализует JWT и имеет встроенную аутентификацию. – iulian