Можно ли использовать OAuth 2.0 без redirect_uri или без настройки сложного сервера?
Я должен передать некоторые файлы на удаленный сервер, для которого мне нужно выполнить OAuth2.0, чтобы получить токен доступа, а затем просто выполнить запрос POST для загрузки файлов.
Теперь мне лень настраивать проект Django в облаке, а затем выполнять OAuth2, хотя для этого нет "слишком хорошей" библиотеки.
Итак, я собираюсь выполнить OAuth2, используя rauth lib в качестве простого скрипта на Python, не настраивая сервер, который принимает запросы и все...
Однако в профиле удаленного сервера мне нужно предоставить redirect_url и, конечно, в клиентской библиотеке rauth.
Есть ли какие-либо возможные способы сделать это авторизация без реальной настройки проекта в облаке.. Я просто ищу скрипт на python.
1 ответ
Я автор и хранитель истины.
Раут больше не навязывает redirect_uri
, так что, если ваш провайдер разрешает это, вы можете отказаться от его использования. Однако, если ваша конечная цель не состоит в настройке сервера, это должно быть выполнимо даже при redirect_uri
требуется поставщиком. Вы можете, например, перенаправить на локальный хост, где вы можете настроить минимальный сервер с помощью Flask или, если поставщик разрешит это, какой-нибудь другой, произвольный URL, например, Facebook предоставляет https://www.facebook.com/connect/login_success.html для эта цель. И у провайдера, которого вы используете, может быть похожая схема. Вот пример с Раутом.
Другой вариант - использовать аутентификацию на предъявителя с grant_type=password. Предполагается, что все поставщики OAuth 2.0 поддерживают аутентификацию на предъявителя, но могут не реализовывать пароль grant_type. Это не требует redirect_uri
вместо этого вы в конечном итоге передаете серверу свои учетные данные пользователя, и он должен вернуть вам токен доступа. Если ваш провайдер разрешает Bearer Auth с паролем grant_type, это, вероятно, идеально для вас. Rauth 0.5.3 пытается использовать Bearer Auth по умолчанию, поэтому все, что вам нужно сделать, это передать тип grant_type. Не забудьте обновить, прежде чем дать этому попробовать.
Вот простой пример:
# assume you have constructed an OAuth2Service object and bound it to `serv`
params = {'grant_type': 'password',
'username': 'foo',
'password': 'hunter2'}
s = service.get_auth_session(params=params)
r = s.get('https://example.com/api/some/endpoint')
В зависимости от провайдера и того, что вы хотите сделать, может потребоваться дополнительное расследование. Однако, надеюсь, это даст вам кое-что для начала.
редактировать
Я думаю, что мой комментарий о пароле grant_type немного сбивает с толку: я, кажется, намекаю, что вы должны использовать его с Bearer Auth (здесь под Bearer Auth я имею в виду прикрепление токена доступа в заголовке Authorization в формате Bearer), но на самом деле вы этого не делаете "т. Допустимо, хотя и не рекомендуется отправлять учетные данные в методе лица [1]. Если вы используете rauth и обнаруживаете, что аутентификация не работает должным образом, вам может потребоваться отключить Bearer Auth следующим образом:
s = service.get_auth_session('/some/resource',
data={'code': code},
bearer_auth=False)
Из спецификации:
[1] "Клиенты ДОЛЖНЫ делать аутентифицированные запросы с токеном-носителем, используя поле заголовка запроса авторизации со схемой авторизации HTTP-канала-носителя. Серверы ресурсов ДОЛЖНЫ поддерживать этот метод".