Как отладить ошибку 403 в Rest API с допустимым токеном в пакете запросов Python

#python #python-requests #adobe

#python #python-запросы #adobe

Вопрос:

Я новичок в использовании API и пытаюсь получить доступ к Adobe Rest API с помощью пакета запросов. Мне удалось получить токен, но я получаю ошибку 403 (выход из системы) при любом запросе, который я пытаюсь выполнить.

Я успешно выполнил аутентификацию OAuth и, используя устаревший поток приложений (требуемый Adobe), я извлек токен, который предоставляет мне доступ для чтения и записи. Я попробовал несколько запросов get, получающих ошибку 403, срок действия сеанса истек. Я посмотрел онлайн и попытался очистить свои файлы cookie перед созданием нового токена с теми же результатами. Однако сгенерированный токен отлично работает с Postman, и я могу получать запросы оттуда, так что, похоже, это не имеет никакого отношения к аутентификации / учетным данным / сеансу. Служба поддержки Adobe также не имеет понятия о том, почему это происходит!


Вот токен, который я получаю обратно после идентификации:

 {'access_token': 'some-encoded-string',
 'expires_at': 1552652569.358807,
 'expires_in': 3599,
 'refresh_token': 'some-encoded-string',
 'scope': ['read', 'write'],
 'token_type': 'bearer'}
  


Вот запрос и ошибка:
r = requests.get(‘https://url-endpoint‘)

 r : <Response [403]>

r.json()
{'code': 'ACCESS_DENIED',
 'message': 'Your session has expired. Please proceed to the login page'}
  

Я в недоумении относительно того, почему это не работает или даже с чего начать!

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться некоторым кодом о том, как вы используете токен для вызова конечной точки

2. Я вижу, что срок действия вашего токена 1552652569.358807 действительно истек более недели назад: 15.03.2019 в 12: 22 (UTC)

3. Да, это потому, что пример старый, но тогда я не работал.

4. @DeveshKumarSingh На самом деле я нигде не передаю токен, что может быть причиной того, что я ошибаюсь… как бы вы это сделали? На данный момент я просто извлекаю его таким образом, прежде чем вводить запрос get, показанный в моем исходном сообщении —- token = oauth. fetch_token(token_url=’ api.xxx.com/oauth/token ‘, имя пользователя=username, пароль = password, client_id=client_id, client_secret = client_secret) —-

5. Я думаю, вы можете попробовать пользовательские заголовки ( docs.python-requests.org/en/master/user/quickstart / … ), чтобы передать ваш токен авторизации

Ответ №1:

@Devesh Kumar Singh да, это правильная идея, я забыл один шаг — в итоге я использовал client = OAuth2Session(client_id, token = токен) и оттуда r = client.get(‘https://url-endpoint ‘, параметры=params) работает отлично.