OAuth2 с усилением зверя возвращает временное перенаправление 307 - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь реализовать приложение с доступом к Google Drive в Beast Boost C ++ с использованием аутентификации outh 2.

https://developers.google.com/identity/protocols/OAuth2ForDevices

Я пытаюсь получить код пользователя в Postman со следующимPOST-запрос:

POST /o/oauth2/device/code HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache


scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file&client_id=610490019085-l1v2mv7lv95lu7cr111vbtqmp1bigv42.apps.googleusercontent.com

И он прекрасно работает, возвращая:

{
"verification_url": "https://www.google.com/device",
"expires_in": 1800,
"interval": 5,
"device_code": "AH-1Ng0IgBnIXIUeltwDoL7AwNExNTT0rozdxD5FMnP8dip4DaDi8_XtzK2aVT92YKYmYa7KWqHRVqw5AmJCDtalzK3k6pvbFw",
"user_code": "LWZY-BDXD"

}

Теперь я хочу сделать тот же запрос в C ++, используя boost, сследующий фрагмент кода для запроса:

http::request<http::string_body> req{http::verb::post, "/o/oauth2/device/code", 11};

req.set(http::field::host, "accounts.google.com");
req.set("Cache-Control", "no-cache");
req.set(http::field::content_type, "application/x-www-form-urlencoded");
req.body() = "scope=https://www.googleapis.com/auth/drive.file&client_id=610490019085-l1v2mv7lv95lu7cr111vbtqmp1bigv42.apps.googleusercontent.com";

req.prepare_payload();

Этот возвращает:

HTTP/1.0 307 Temporary Redirect
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Mon, 14 May 2018 11:06:01 GMT
Location: https://accounts.google.com/o/oauth2/device/code
Content-Length: 232
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE

<HTML>
<HEAD>
<TITLE>Temporary Redirect</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Temporary Redirect</H1>
The document has moved <A HREF="https://accounts.google.com/o/oauth2/device/code">here</A>.
</BODY>
</HTML>

Любые идеи, как я могу вернуть JSON, как с почтальоном?

СпасибоВы!

1 Ответ

0 голосов
/ 14 мая 2018

Beast - это низкоуровневая библиотека протоколов, она ничего не знает о разрешении доменных имен или подключении сокетов.Он даже не знает о TCP / IP, а только о том, как сериализовать и десериализовать сообщения HTTP / 1 над объектами, которые отвечают требованиям концепции потоков Asio (примеры: SyncReadStream или AsyncWriteStream).Вы должны справиться с перенаправлениями самостоятельно.Если вы получите ответ о перенаправлении, извлеките значение поля Location и проанализируйте URI, разрешите домен, а затем выполните другой запрос GET для указанного ресурса.

Я надеюсь, что другие люди (возможно, вы?)будет построен поверх beast и предоставит функциональность более высокого уровня, подобную этой, в форме библиотек с открытым исходным кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...