2013-07-20 1 views
0

Я изо всех сил пытаюсь получить авторизацию OAuth2 для работы над сценарием, над которым я работаю, когда запускаю его на экземпляре сервера EC2 Linux (работает Ubuntu 13.04). Соответствующий фрагмент кода является:Почему аутентификация OAuth2 работает на домашней машине, но не на сервере?

with open('creds.txt') as f: 
    creds = {} 
    for line in f: 
     creds[line.split(',')[0]] = line.split(',')[1].rstrip('\n') 

self.client_id = creds['client_id'] 
self.client_secret = creds['client_secret'] 
self.username = creds['username'] 
self.password = creds['password']) 

token_response = requests.post(
    "https://example.com/oauth2/access_token/", 
    data={ 
     "grant_type": "password", 
     "client_id": self.client_id, 
     "client_secret": self.client_secret, 
     "username": self.username, 
     "password": self.password, 
     "scope": "read+write"}).json() 

Он прекрасно работает на моем домашнем компьютере (под управлением ОС Windows 7), только не тогда, когда я пытаюсь запустить его удаленно, где я получаю: {u'error': u'invalid_client'}.

Я пробовал настроить новый идентификатор клиента и секрет и все равно получить тот же ответ.

  • Почему он работает по-другому на удаленном сервере на моей собственной машине?
  • Имеет ли значение, на какой машине было создано приложение (см. Комментарий)? - Я исключил эту возможность, успешно выполнив аутентификацию с использованием CURL в обеих средах.

Единственное, о чем я могу думать сейчас, это то, что, возможно, библиотека запросов обрабатывает запрос POST по-разному на Ubuntu. Кто-нибудь знает, если это так?

+0

[Этот ответ] (http://stackoverflow.com/a/11267728/1706564) кажется, что он может быть уместным, так как предполагает, что идентификатор клиента заботится о том, на какой ОС он был сгенерирован. Я не могу найти ничего, чтобы подтвердить это в [docs] (http://tools.ietf.org/html/rfc6749). –

ответ

0

Это, пожалуй, первое, что я должен был думать о том, когда есть разница между Nix и Windows, сред:

Всегда Проверьте символы EOL!

Проблема заключалась в том, что при захвате имя пользователя, пароль и т.д. из файла мои документы, я раздевая символ новой строки, используя string.rstrip('\n'), так и в среде Unix, которая оставляя символ возврата каретки \r, за которым затем быть переданы как часть запроса POST.

simple and correct solution, который работает в обеих средах, должен использовать string.rstrip(), который разделяет все символы пробелов и символов конца строки.

Смежные вопросы