BOX API利用してみる
OAuthの勉強も兼ねて BOX APIを使ってみる。API利用までのステップは以下の通り
- ローカルウェブサーバの準備
- Boxのアカウント登録とアプリケーション登録
- ユーザーから許可を取得
- 許可コードからアクセスコード取得
- アクセスコードを使ってAPI利用
1. ローカルウェブサーバの準備
OAuthでは、ユーザからの許可(ブラウザ上で)をもらったあとの許可コードをURLのパラメータに付けて送りつける(リダイレクトする)。このためのURL(ウェブサーバ)を準備。
localhostでOKなので適当なウェブサーバを用意(Python,Ruby , NodeJSなんかで適当に)
2. Boxのアカウント登録とアプリケーション登録
- Boxアカウントの登録。下記サイトでアカウントを作成
- 続いてアプリケーションの登録。下記サイトへアクセス。ログインIDは上のステップで作ったもの。
ログインしたあとに"Create a Box Application"を選んでアプリケーションを定義する。ここでclient_idとclient_secretなるものを取得する。
また、許可コードを取得するためのURLとして、ローカルウェブサーバを指定する。
3.ユーザーから許可を取得
ブラウザをつかって下記のURLへアクセスする。
XXX ... 前のステップで取得した client_id
YYY ... ローカルウェブサーバのURL
許可をもとめる画面が表示される。許可ボタンをおすと 指定したURLへ飛んで行く
(ローカルウェブサーバ)URLへ飛ぶ時にパラメータ(code) がくっついてくる。このcodeの値が許可コードとなる。ということでローカルウェブサーバは、このcodeを画面に表示するなりファイルへ出力するなりする必要がある。
許可コードの有効期間は30秒と短いようです。
4. 許可コードからアクセスコード取得
前のステップで取得した許可コードをつかってアクセスコードを取得。
curlだとこんな感じ
curl https://api.box.com/oauth2/token \
-d 'grant_type=authorization_code' \
-d 'code=ZZZ' \
-d 'client_id=XXX' \
-d 'client_secret=WWW' \
-X POST
ZZZ ... ステップ3で取得した許可コード
XXX ... ステップ2で取得したclient_id
WWW ... ステップ2で取得したclient_id
応答としてこんなのが返ってくればOK.
{"access_token":"XXXXXXXXXX","expires_in":3894,"restricted_to":[],"refresh_token":"YYYYYYYYYY","token_type":"bearer"}
5. アクセスコードを使ってAPI利用
ステップ4で取得したaccess_tokenの値をAPIに設定して、APIを利用。
ユーザ情報を取得するAPIの場合にはこんなかんじ。
curl "https://api.box.com/2.0/users/me" -H "Authorization: Bearer XXXXXXXXXX"
access_tokenの有効期限は1時間ということなので、1時間経過するまえにrefresh_tokenをつかって アクセスコードをリフレッシュする。
curl https://api.box.com/oauth2/token \
-d 'grant_type=refresh_token' \
-d 'refresh_token=YYYYYYYYYY' \
-d 'client_id=XXX' \
-d 'client_secret=WWW' \
-X POST
疑問
このやり方だとclient_secretの値を、クライアントプログラムに持たせる必要がありますね。クライアントプログラムをユーザに配っちゃうと、client_secretがバレバレになります。。。。
よいのかな?