Код аутентификации OAuth2 из настольного приложения - PullRequest
0 голосов
/ 06 мая 2020

У меня проблемы с настольным приложением и подключением к Blizzard API. Что касается OAuth2, я знаю, что мне нужно перенаправить пользователя на веб-сайт, где они предоставляют приложению авторизацию для доступа к данным от их имени. Отсюда есть URL-адрес перенаправления, содержащий код авторизации, который необходимо обменять на токен доступа.

Мое приложение предназначено для настольных компьютеров, поэтому я не знаю, как получить код авторизации из этого URL-адреса перенаправления. Вот часть моего кода, который я использую для тестирования:

if self._check_connection():
        self.client_id = os.getenv("BLIZZ_CLIENT_ID")
        self.client_secret = os.getenv("BLIZZ_CLIENT_SECRET")
        self.region = "us"
        state = "abcd1234"

        re = requests.get(f"{BLIZZ_AUTH_URL}?client_id={self.client_id}&response_type=code&redirect_uri={REPO_URL}&locale={self.region}&scope={SC2_SCOPE}&state={state}")

        re_url = re.url
        print(re_url)

Более полный продукт будет использовать веб-браузер, чтобы заставить пользователя авторизовать мое приложение, но затем мне нужно получить этот код, который будет в URL перенаправления после нажатия «Разрешить». Итак, я пытаюсь получить URL-адрес в этом последнем бите, но когда я печатаю его на консоли, чтобы проверить, он не содержит кода авторизации. Однако, если я щелкну по нему, откроется нужная страница в браузере, которая содержит код авторизации.

Спасибо, что нашли время, чтобы прочитать, я просмотрел всевозможные сообщения в Inte rnet, но большинство из них посвящены веб-приложениям или они говорят что-то расплывчатое, например «получите код авторизации и обменяйте его», не уточняя, как это на самом деле работает.

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

1 Ответ

1 голос
/ 16 мая 2020

Поскольку вы просите пользователя авторизовать ваше приложение через провайдера OAuth2, вам необходимо передать правильный uri перенаправления на сервер OAuth2.

Обычно это действительный домен, указывающий на веб-сервер, который будет обработать запрос. Для настольного приложения (или мобильного, если на то пошло) у вас не будет веб-сервера, поэтому вам понадобится специальный протокол для обработки этого ответа и перенаправления его в ваше приложение.

Например, когда вы щелкаете по электронной почте адресная гиперссылка mailto:email@server.com протокол mailto: сообщает браузеру перенаправить вызов в ОС хоста и открыть почтовое приложение по умолчанию. То же самое работает для большинства приложений, которые взаимодействуют с браузером, например Skype, Discord, Twitch и т. Д. c

Для приложений windows вы можете прочитать этот топ c для руководства: Как мне зарегистрируйте собственный протокол URL в Windows?

Идея состоит в том, чтобы открыть браузер с битвой. net вход в систему, но URL-адрес перенаправления будет указывать на ваш собственный протокол, таким образом, ваш приложение получит сообщение, содержащее полный URL-адрес, включая authorization_code, который вам нужен.

Обратите внимание, что при этом ОС запустит новый экземпляр вашего приложения, вам придется использовать какую-то систему обмена сообщениями / pipe / sockets для перенаправления данных из нового экземпляра в текущий работающий. Чтобы обнаружить ранее запущенное приложение, вы можете просто использовать мьютекс.

...