見出し画像

Coldfusionノート|Box APIと OAuth2.0

Coldfusionでbox APIをつかって、Boxにファイルをアップロード手順のメモ。
せっかくTwitterでOAuth2.0の仕組みをなんとなく理解できたので、もう少し理解を深めるためと、今後の実務に直結しそうなので。
Box Developersのマイアプリで認証方法を「OAuth 2.0 (ユーザーまたはクライアント認証)」を選んで、諸設定おわっている前提です。

変数設定

<cfset v.client_id = "Box Developers よりクライアントID">
<cfset v.client_secret = "Box Developers よりクライアントシークレット">
<cfset v.rd_url = "Box Developers より リダイレクトURI"><!--- リダイレクト先 最終的には認証後にえらえるコードを読み取るプログラムの設置URL --->
<cfset v.state = "kit_mu"><!--- 任意の文字列、クライアント認証後にリダイレクト時にURLのクエリとしても取得可能 --->
<cfset v.boundary = "xxxxxxxx"><!--- 任意の文字列、multipart/form-dataを送る時に設定していないとエラーがでる場合がある --->
<cfset v.box_json = '{"name":"test.pdf", "parent":{"id":"00000000"}}'><!--- アップロードするファイル名と、アップロード先のBoxのフォルダID --->

1.クライアントがアプリ使用の認証コードを発行

<cfoutput>
https://account.box.com/api/oauth2/authorize?response_type=code&client_id=#v.client_id#&redirect_uri=#v.rd_url#&state=#v.state#
</cfoutput>

2.APIを実際に使うための認証トークンと再取得のためのトークンを取得

1.でつくったURLをリクエストするとBoxのアプリ認証画面になり、許可すると次のクエリを付与してリダイレクトされます。
?state=#v.state#&code=XXXXXXX
このコードを30秒以内に次のプログラムを実行すると認証トークン(access_token)と再取得のためのトークン(refresh_token)が得られます。

<cfhttp url="https://api.box.com/oauth2/token" method="post" result="rt">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="formfield" name="client_id" value="#v.client_id#">
<cfhttpparam type="formfield" name="client_secret" value="#v.client_secret#">
<cfhttpparam type="formfield" name="code" value="#URL.code#">
<cfhttpparam type="formfield" name="grant_type" value="authorization_code">
</cfhttp>

<cfset box_result = DeserializeJSON(rt.Filecontent)>
<cfdump var="#box_result#">

<cfset session.access_token = box_result.access_token>
<cfset session.refresh_token = box_result.refresh_token>

3.ファイルをアップロードする

2.の認証トークンの有効期間は戻り値で確認してください。
有効期限中に下記フォームでtext.pdf ファイルをアップロードするとします。

<form action="index.cfm" method="post" enctype="multipart/form-data">
<input type="file" name="f">
<input type="submit" name="upfile" value="UP Load">
</form>

アップロード時のCFの記述は以下、

<cfhttp url="https://upload.box.com/api/2.0/files/content" method="post" charset="utf-8" result="rt">
<cfhttpparam type="header" name="Content-Type" value="multipart/form-data; boundary='#v.boundary#' ">
<cfhttpparam type="header" name="Authorization" value="Bearer #session.access_token#">
<cfhttpparam type="formfield" name="attributes" value="#v.box_json#">
<cfhttpparam type="file" name="file" file="#form.f#">
</cfhttp>

<cfdump var="#rt#">

指定したBoxのフォルダにファイル(test.pdf)がアップロードできてればOK

4.認証トークンの有効期限が切れた場合は

認証トークンが無効になっているので、下記プログラムで再取得。

<cfhttp url="https://api.box.com/oauth2/token" method="post" result="rt">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
<cfhttpparam type="formfield" name="client_id" value="#v.client_id#">
<cfhttpparam type="formfield" name="client_secret" value="#v.client_secret#">
<cfhttpparam type="formfield" name="refresh_token" value="#session.refresh_token#">
<cfhttpparam type="formfield" name="grant_type" value="refresh_token">
</cfhttp>

<cfset box_result = DeserializeJSON(rt.Filecontent)>
<cfdump var="#box_result#">

<cfset session.access_token = box_result.access_token>
<cfset session.refresh_token = box_result.refresh_token>

この記事が気に入ったらサポートをしてみませんか?