Получение токена доступа из URI перенаправления Oauth2 с использованием сокетов - PullRequest
0 голосов
/ 04 января 2019

Я создаю программу базы данных, для которой потребуется создать резервную копию файла размером <1 МБ 7z в Dropbox. Чтобы использовать Dropbox, мне нужно получить токен доступа от пользователя, который можно использовать повторно, и я буду шифровать его для хранения. Моя проблема заключается в получении токена доступа из URI перенаправления. </p>

Чтобы получить токен доступа, вы переходите по ссылке, такой как https://www.dropbox.com/oauth2/authorize?client_id=[YOUR_APP_ID_HERE]&response_type=token&redirect_uri=http://localhost:50000, и после авторизации вы отправляетесь по URL, который вы указали в ссылке (который в моем случае равен http://localhost:50000). URL будет выглядеть примерно так:

http://localhost:50000/#access_token=[ACCESS_TOKEN_HERE]&token_type=bearer&uid=[UID_HERE]&account_id=[ACCOUNT_ID_HERE]

Чтобы завершить авторизацию, мне нужно получить токен доступа по вышеуказанной ссылке, когда я перенаправлен на него. До сих пор я использовал socket для создания сокета, привязанного к порту 50000 на локальном хосте, и я могу видеть соединения с сокетом и отправлять сообщения обратно. Тем не менее, я не знаю, как увидеть полный URL, который был использован для перенаправления пользователя, который мне нужен для токена доступа. Пока мой код выглядит так:

APP_KEY = "MY_APP_KEY"
APP_SECRET = "MY_APP_SECRET"
ACCESS_TYPE = 'app_folder'


webbrowser.open_new_tab("https://www.dropbox.com/oauth2/authorize?client_id=[MY_APP_KEY]&response_type=token&redirect_uri=http://localhost:50000/")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 50000))
s.listen(1)
conn, addr = s.accept()
print('Connected with ' + addr[0] + ' : ' + str(addr[1]))
conn.send(bytes(f"Welcome to my localhost server on port 50000. Your    address is {addr}", "utf-8"))
data = conn.recv(1024)
print(f"Data: {data.decode()}")

Я надеялся, что в data, возвращаемом conn.recv(), будет некоторая информация о запросе http, но результат будет следующим:

Connected with 127.0.0.1 : 54697
Data: GET / HTTP/1.1
Host: localhost:50000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.dropbox.com/
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Кто-нибудь знает, как я мог бы получить полный URI перенаправления без необходимости пользователя копировать и вставлять его в мою программу? Это мой первый проект с использованием сокетов, и я все еще некомпетентен с ними.

Спасибо за любую помощь.

...