oauth2/auth

YouTubeで動画をアップロードしたりする時、まずはGoogleのOAuth2認証を通過しないといけない。

Using OAuth 2.0 to Access Google APIs  |  Google Identity Platform  |  Google Developers

認証情報
認証情報

認証情報からウィザード選択。

その他のUI
その他のUI

Windowsなのでその他のUI。

クライアントID作成
クライアントID作成

クライアントIDを作成。

IDが作成された
IDが作成された

ダウンロードボタンでjsonファイルをダウンロードして、完了。

client_id.jsonの内容は、

{"installed":{"client_id":"xxx.apps.googleusercontent.com","project_id":"bg1youtubetest1-xxxxxx","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"xxx","redirect_uris":["xxx","http://localhost"]}}

ちょっと改変したけど大雑把にこんな感じのファイルがダウンロードされる。

main.cppで、

と書くのだが、

Google API OAuth2.0のトークン取得手順 - Qiita
Google API OAuth2.0のアクセストークン&リフレッシュトークン取得手順メモ - Qiita

CLIENT_IDは、client_id.jsonにあるやつ。
REDIRECT_URIは、redirect_urisの1番目のやつ。(localhostじゃなくてその前。)
SCOPEは、
Choose Auth Scopes  |  Gmail API  |  Google Developers
ここにサービスごとに書いてあるらしい。ただ、YouTubeはないな。
いろいろ調べたら、YouTubeは、
https://www.googleapis.com/auth/youtube
らしい。

で実行すると、

WSAStartup success!
soc = 520
connect success!
ctx = 00c95690
ssl = 00caed88
SSL_set_fd success!
SSL_connect success!
SSL_write written = 324
HTTP/1.0 302 Found
Content-Type: application/binary
Location: xxx
P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info."
Content-Language: en-US
Date: Thu, 07 Sep 2017 03:50:44 GMT
Server: ESF
Content-Length: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=111=xcq3PaRj5M4OBMdXAkmBuD_jO_uKYdfHe2vQwihJa8RQx4SwaU1J3SGQy9xfhNfLw1TRcpcqlPQAqv8UgOhwp4P5DfLevVrbumrIBw26Uqrp__hosTl4a1T0_Y4GdehB;Domain=.google.com;Path=/;Expires=Fri, 09-Mar-2018 03:50:44 GMT;HttpOnly
Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,35"


続行するには何かキーを押してください . . .

本来、このリクエストをブラウザでやると、上のLocation: xxxによって、そこにリダイレクトされる。
"xxx"の部分に、とても長いURLが入ってるので、そこに行くと、Googleの認証ボタンページに飛び、それを押すと、エディットボックスに認証コードが入っている。
で、この認証コードとそれまでに得た情報でトークンが得られるのだが、今回はあくまで認証コード取得までとする。

Sample/google/oauth2/auth/src/oauth2 at master · bg1bgst333/Sample · GitHub