まえおき
LinuxサーバからBoxへファイル転送をする必要がでてきたため、BoxAPIを使ってファイルをアップロードする方法を調べました。
OAuth2の認証方法がわかればあとは簡単でしたが、認証部分で若干わかりずらかったので備忘録として記載です。
調べたこと
連携手段
Boxは企業向けクラウドストレージサービスなので、連携方法は色々あるようで、
・Windows/MacからデスクトップアプリケーションでSyncする
・REST API経由でデータをやり取りする
・LinuxからコマンドラインでSyncさせる
などありましたが、今回はBoxの理解をしたかったのとEC2側のストレージの枯渇が心配だったのでBoxのAPIを使うことにしました。
(ホントはrclone使ってsyncするのがよさそう)
以下手順です。
認証
Boxではいくつかの認証方法が用意されていて、AccessTokenを利用した方法を選択してます。
管理者権限があるなら全権限があるTokenも発行できる気がするのでそちらの方が楽かも。
(↑まだやってない)
やったこと
1. 連携用のアプリケーションを発行する
BOXへログインし開発者コンソールからアプリケーションを発行する。
認証方法は「標準OAuth 2.0 (ユーザー認証)」を選択。
https://[会社名など].app.box.com/developers/console
2. 設定からリダイレクト先を指定する
発行したアプリの「Configuration」の「OAuth 2.0リダイレクトURI」に以下を設定
http://0.0.0.0
3. ブラウザで以下を叩くと認証画面が出てくるので認証する
https://account.box.com/api/oauth2/authorize?response_type=code&client_id=[client_id]&state=security_token=[client_secret]
4. 認証用コードを取得する
上記で認証すると「0.0.0.0」にリダイレクトして失敗するが、URLのcodeに認証コードがついてるのでコピー。
http://0.0.0.0/?state=security_token%3D[client_secret]&code=[auth_code]
5. Curlなどでアクセストークンとリフレッシュトークンを発行する
上記の「auth_code」を使ってcurlやPOSTMANで実行するとAPI実行に必要なアクセストークンとリフレッシュトークンがjsonで取得できます
curl https://api.box.com/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'grant_type=authorization_code&code=[auth_code]&client_id=[client_id]&client_secret=[client_secret]' \
-X POST
6. APIが通るか確認する
あとはリファレンス通りにCurlを叩くとBoxの情報を取れます。
curl https://api.box.com/2.0/folders/[folder_id] \
-H "Authorization: Bearer [access_token]"
所感
-
毎度のことだが英語のドキュメント大事。
-
認証さえ理解できればそのほかはシンプルだったが、アクセストークンが1時間で無効になることと、リフレッシュトークンが60日で無効になるので、多少プログラム側で工夫が必要そうです。
(管理者権限でAPI発行すれば良さそう)
参考
Box Auth
https://developer.box.com/v2.0/docs/oauth-20
Box API リファレンス:
https://developer.box.com/v2.0/reference
Access/Refresh Token の取得方法
https://www.youtube.com/watch?v=ZsQFXlMWM-E