Особенно при работе с API, который не находится на том же домене или сервере, что и ваш интерфейс, обычно лучше использовать что-то вроде потока веб-приложений для OAuth 2. Обычно это называется implicit grant и использует grant_type
от token
.
Таким образом, вам не нужно беспокоиться о отправке учетных данных через провод, как вам нужно для resource owner password credentials grant. В то же время вам также не нужно скрывать секретные ключи для authorization code grant.
С неявным грантом на локальном компьютере должен храниться только токен OAuth. Это должно быть лучше, поскольку токен должен быть способен быстро отменить в случае, если токен станет общедоступным или что-то еще заставляет его признать недействительным. Пользователь должен быть зарегистрирован на сервере API при запросе авторизации, но большинство поставщиков OAuth поддерживают страницу пользовательского входа, которая также может использоваться.
С предоставлением учетных данных пароля на локальном компьютере должны храниться как имя пользователя, так и пароль, что требует дополнительной защиты. Их также значительно сложнее отменить, если возникнет такая необходимость.
Я просто не понимаю, как я могу различить 2 разных пользователей в этом типе гранта (неявный). Ни в коем случае конечный пользователь не просит предоставить свои учетные данные (имя пользователя и пароль), поэтому как использовать скрытый грант для защиты конечной точки API, такой как 'example.com/api/account-details /'? – Buddyshot
С неявным грантом клиент (пользователь API, мобильное приложение, например) должен отправить пользователя (пользователя мобильного приложения) на ваш сайт, отображая страницу авторизации в браузере. После входа пользователя в систему и авторизации приложения приложение получит маркер доступа. –
Таким образом, это работает тогда и только тогда, когда конечная точка авторизации (открытая сервером OAuth2) требует обычной проверки подлинности, такой как класс разрешений 'rest_framework.permissions.IsAuthenticated' в DRF. Таким образом, пользователь, который приземляется на конечной точке авторизации **, должен ** войти в систему, прежде чем предоставлять доступ клиенту. Однако всегда ли это так (конечная точка auth требует аутентификации, особенно в django-oauth-toolkit)? Как работает механизм аутентификации, когда у нас установлена настройка «OAuth2Backend» в Django? – Buddyshot