Boxにつないでみた!【前編:OAuth2.0認証機能をつくってみた】

Avatar
dstn


こんにちは。技術部 對馬です。
今回は、Box連携についてです。

以前開催されたdstnHUBで、弊社開発部が発表したLTの内容を記事にまとめてみました。
この記事では、BoxのContent APIにつなぐときに必要な「OAuth2.0認証」について書いていきます。
実際のBox連携の話は『Boxにつないでみた!後編』で書かせていただきます。

Boxとは


Boxとはセキュアなコンテンツコラボレーションのためのクラウドサービスです。

Boxを使用するには、開発者向けのREST APIがあります。

このAPIにはBox Content APIとBox View APIの2種類がありますが、今回はBox Content APIによる連携に挑戦していきたいと思います。

OAuth2.0認証問題


Box Content APIで連携しようとすると認証の問題が発生します。

それは「 DataSpider ServistaにOAuth2.0認証機能がありません」という問題です!

しかし、そこはやはりDataSpider Servista。

『ないのなら 作ってやろう ホトトギス』

ということなので、OAuth2.0認証スクリプトを作成しましょう。

Box事前準備


OAuth2.0認証スクリプトに取り掛かる前に、Boxで利用するアプリを作成します。

BOXアプリケーションの作成

「Boxアプリケーションの作成」を押下します。
※作成済みのアプリケーションの削除はできませんので、作りすぎにはご注意!

次に使用するAPIを選択します。

BOXアプリケーションの作成画面

今回はContent APIを使用しますので、「Box コンテンツ」を選択し、「アプリケーションの作成」ボタンを押下。
※アプリケーションが使用するAPIは変更できませんのでご注意!

これでアプリが完成しました。
準備ができたら、いざスクリプト作成へ!

OAuth2.0認証実装


スクリプト紹介のその前に、DataSpider ServistaにおけるOAuth2.0認証ではどんなことを行うのか、簡単に説明します。

OAuth2.0認証での目的は、アクセストークンの取得です。

目的のために、DataSpider Servistaでは、以下の処理を行います。

①アクセストークン期限確認処理
②認可コード取得処理
③アクセストークン取得処理

OAuth2.0認証概要図


このようにOAuth2.0認証プロジェクトは主軸の「アクセストークン準備」スクリプト(①)と、複数のスクリプトから構成されています。

これから各スクリプトの解説を始めます。

アクセストークン準備


それでは主軸のスクリプトである、「アクセストークン準備」スクリプトからお話ししましょう!
スクリプトを順に説明していきます。
アクセストークン準備スクリプト説明用数字付き

①クライアント情報取得:BOXでアプリを作成した際に取得したclient_id およびclient_secret を変数にセットするスクリプト。

②保存済みトークン取得:access_token, accessTokenExpiresAt(有効期限), refresh_token, refreshTokenExpiresAt(有効期限) を変数セット。

③トークン発行処理分岐:取得したトークン情報をもとに有効期限が切れているか判定。判定結果から「トークン発行」、「トークン再発行」、「そのまま続行」に分岐。

④取得済みトークン保存:取得トークンの保存。


今回はトークンがないこととし、説明を進めていきます。

判定により分岐点で「トークンなし、リフレッシュトークン期限切れ」へ進むと、『認可コード取得・トークン発行』スクリプトが呼び出されます。

認可コード取得・トークン発行


認可コード取得・トークン発行スクリプト

このスクリプトでは、表示されるBoxログインページからログインしてリダイレクトさせ、認可コードを受信。
そして取得した認可コードを使い、トークンを発行しています。

スクリプトと説明文ではわかりにくいので、簡単な図を用意しました。

認可コード取得概要図(番号付き)
※クリックで拡大※

まずは認可コードを取得します。

①ログイン・アクセス承認要求
OAuth2.0認証では以下のパラメータを持つリクエストを通じて、authorize URL (https://app.box.com/api/oauth2/authorize) にログイン画面を表示させることができます。

【必須パラメータ】
・response_type:codeを必ず指定します。
・client_id:登録時に発行したclient_id を指定します。

【オプションパラメータ】
・state:認可コード発行の際にこのパラメータを付与してリダイレクトします。

パラメータをつけた引数:
https://app.box.com/api/oauth2/authorize?response_type=code&client_id=${clientId}&state=${execId}

今回、stateには認可コード要求と関連付けるために、実行ID(execId)を設定しています。

ブラウザ起動プロパティ

このようにブラウザ起動処理に引数をつけ、表示されたログインページからログインします(図における②)。

ログイン画面

このログイン後、概要図③のリダイレクトが行われます。

OAuth2.0認証プロジェクトでは、このタイミングで「認可コード受信・結果出力」スクリプトを実行します。

OAuth2.0認可コード待ち受け


リダイレクトをきっかけとし、「認可コード受信・結果出力」スクリプトを自動的に実行させる設定を行います。

「認可コード受信・結果出力」スクリプトは自動実行するため、事前にHTTPトリガーをセットします。

トークン受付HTTPトリガー

ここで設定されたトリガーURLを、Boxの設定画面の「redirecrt_uri」に入力します。

HTTPトリガー発動URL入力

これで自動実行の設定は完了です。

認可コード受信・結果出力スクリプト
それでは改めて、「認可コード受信・結果出力」スクリプトの説明に入ります。
このスクリプトでは、認可コード保存を行います。

Boxへのログイン成功後、ユーザーが自分のアカウントにアクセスするようにアプリケーションを承認するために、同意ページが表示されます。

アクセス許可画面

アクセスを承認すると認可コードを受け取ることができ、このスクリプトではCSVで認可コードを保存します。


「認可コード受信・結果出力」スクリプトの実行が終了したら、今度はまた「認可コード取得・トークン発行」スクリプトに戻ります。

トークン取得


待ち受けスクリプト含む認可コード取得

「認可コード受信・結果出力」実行中、「認可コード取得・トークン発行」スクリプトでは『認可コード受信待ち(一分間)』のLoopを行い、『認可コード一時ファイル存在確認』をします。
無事に認可コードの一時ファイルが保存されると存在確認のループを抜け、認可コードのCSVファイルから、認可コードを抽出します。

そしてRESTアダプタを使い、認可コードと引き換えにトークンを取得します。

RESTプロパティ


「取得済みトークン保存」スクリプトで、トークンをCSVで保存します。

トークンを無事に保存できたら、「アクセストークン準備」スクリプトは終了となります。

OAuth2.0認証完成


DataSpider ServistaになかったOAuth2.0認証を、スクリプトで実現することができました。
Box連携はいよいよここから本番となります。

しかし今回はOAuth2.0認証機能実装のご紹介だけで、だいぶ(私が)おなか一杯になりましたので、Box連携記事は2部構成とし、後編で実際にBoxにつないでみようと思います…。
それではお楽しみに!

(つづく)

コメント

  • Avatar
    伊藤

    すみません、うまくいかないので教えてください。

    基本的な部分ですが、ブラウザを開いてBOXログインしてアクセス許可を与えている画面がありますが、これは人が手で実施するんですか?

    初回のみ必要な作業でしょうか?

     

    0
  • Avatar
    伊藤

    うまく行きました。

    初回は手で実行する必要あるんですね。トークン期限が2ヶ月だったので、最低2ヶ月間は再発行せずにシステム連携し続けられるということでしょうか。

    0

ログインしてコメントを残してください。

Powered by Zendesk