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>
この記事が気に入ったらサポートをしてみませんか?