2014-12-19 3 views
1

У меня есть backend, работающий с Django 1.7, и интерфейс, разработанный отдельно с помощью Bootstrap. Передняя панель ведет переговоры с бэкэнд через API REST, который я хочу защитить с помощью OAuth2.Какой вариант OAuth2 использовать при работе с веб-интерфейсом

Вопрос в том, какой тип гранта использовать? Я доверяю людям, работающим в интерфейсе, но это не значит, что я доверяю Javascript :-) Я не могу решить, должен ли я выбирать неявный грант или пароль владельца ресурса.

Любой опытный совет?

ответ

1

Особенно при работе с API, который не находится на том же домене или сервере, что и ваш интерфейс, обычно лучше использовать что-то вроде потока веб-приложений для OAuth 2. Обычно это называется implicit grant и использует grant_type от token.

Таким образом, вам не нужно беспокоиться о отправке учетных данных через провод, как вам нужно для resource owner password credentials grant. В то же время вам также не нужно скрывать секретные ключи для authorization code grant.

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

С предоставлением учетных данных пароля на локальном компьютере должны храниться как имя пользователя, так и пароль, что требует дополнительной защиты. Их также значительно сложнее отменить, если возникнет такая необходимость.

+0

Я просто не понимаю, как я могу различить 2 разных пользователей в этом типе гранта (неявный). Ни в коем случае конечный пользователь не просит предоставить свои учетные данные (имя пользователя и пароль), поэтому как использовать скрытый грант для защиты конечной точки API, такой как 'example.com/api/account-details /'? – Buddyshot

+0

С неявным грантом клиент (пользователь API, мобильное приложение, например) должен отправить пользователя (пользователя мобильного приложения) на ваш сайт, отображая страницу авторизации в браузере. После входа пользователя в систему и авторизации приложения приложение получит маркер доступа. –

+0

Таким образом, это работает тогда и только тогда, когда конечная точка авторизации (открытая сервером OAuth2) требует обычной проверки подлинности, такой как класс разрешений 'rest_framework.permissions.IsAuthenticated' в DRF. Таким образом, пользователь, который приземляется на конечной точке авторизации **, должен ** войти в систему, прежде чем предоставлять доступ клиенту. Однако всегда ли это так (конечная точка auth требует аутентификации, особенно в django-oauth-toolkit)? Как работает механизм аутентификации, когда у нас установлена ​​настройка «OAuth2Backend» в Django? – Buddyshot