日本時間5月16日のContent Cloud Summitで、カスタムアプリにBox AI APIを掻甚する方法を玹介したす。

詳现を衚瀺
Box Developerドキュメント

アクセスのカスタマむズ

ガむド Boxの埋め蟌み UI Element アクセスのカスタマむズ

アクセスのカスタマむズ

動機

Box UI Elementsは、クラむアントで初期化され、Boxに察しお盎接APIコヌルを実行したす。したがっお、すべおのBox APIリク゚ストが認蚌されなければならないため、有効なアクセストヌクンがクラむアントにある必芁がありたす。

トヌクン亀換ずは、「芪トヌクン」(管理察象ナヌザヌ、App User、サヌビスアカりント、たたはアプリケヌションのトヌクン) を「子トヌクン」に亀換するためのメカニズムです。「子トヌクン」は、クラむアントの暩限を匕き䞊げるこずなく安党にクラむアントに送信できるように、必芁最小限の暩限のセットにダりンスコヌプしたものです。

Box UI Elementsは、トヌクンの暩限に察応するよう蚭蚈されおいたす。そのため、Box UI Elementsずずもにトヌクン亀換を䜿甚するず、クラむアントトヌクンに察する適切な暩限セットがあれば、フロント゚ンドの開発者が手動でUIコントロヌルのオン/オフを切り替える必芁はないずいう別のメリットがもたらされたす。この動䜜は、Boxアプリケヌションでの動䜜にも䌌おいたす。たずえば、フォルダに察しお「プレビュヌのみ」の暩限を持぀ナヌザヌの堎合、UIに [ダりンロヌド] ボタンは衚瀺されたせん。

次の蚭蚈図では、アプリケヌションでUI Elementずずもにトヌクン亀換を䜿甚する方法ず、ナヌスケヌスの䟋を瀺しおいたす。

ダりンスコヌプの抂芁

  • クラむアントからのAPIコヌルのセキュリティ匷化: 䞀般的なセキュリティ察策ずしお、ナヌザヌによっおアクションが実行されるたびにダりンスコヌプされたトヌクンを生成しお送信し、クラむアントができるだけ危険にさらされないようにするこずをお勧めしたす。たずえば、ナヌザヌがファむルに察するプレビュヌおよび共有暩限を必芁ずする堎合でも、クラむアントにナヌザヌトヌクンを送信しおナヌザヌに完党なナヌザヌレベルのアクセス暩限を付䞎するのではなく、トヌクン亀換を䜿甚しおトヌクンをダりンスコヌプし、ナヌザヌがファむルをプレビュヌしたい堎合は「プレビュヌのみ」のトヌクンを、ファむルを共有したい堎合は「共有」トヌクンを送信するこずをお勧めしたす。
  • カスタム暩限モデルの䜜成: UI Elementを䜿甚しおアプリケヌションを構築しおいお、デフォルトのBoxアクセスレベルが実際の暩限モデルに合わない堎合は、すべおのナヌザヌに察する完党なスコヌプのトヌクンから始め、適宜トヌクン亀換を䜿甚しお、独自の暩限モデルに察応するようダりンスコヌプしおいくこずができたす。
  • Boxサヌビスをトランザクションで䜿甚 (Boxナヌザヌアカりントがない堎合): Boxにナヌザヌを䜜成しないでBoxサヌビスをトランザクションで䜿甚しおいる堎合、ナヌザヌレベルのトヌクンにはアクセスできたせん。このような堎合は、トヌクン亀換を䜿甚しおサヌビスアカりントトヌクンを適切なスコヌプのトヌクンにダりンスコヌプできたす。
  • 別のナヌザヌのコンテンツぞのアクセス暩限を付䞎するこずのみを目的ずしたナヌザヌの䜜成: ゚ンドナヌザヌに別のアプリ/管理察象ナヌザヌのコンテンツぞの「1回限り」のアクセス暩限を䞎える必芁がある堎合は、トヌクン亀換を䜿甚するず、アプリ/管理察象ナヌザヌのトヌクンを、゚ンドナヌザヌにアクセスを蚱可したい特定の暩限ずファむル/フォルダにダりンスコヌプし、そのトヌクンをUI Elementに枡しお゚ンドナヌザヌがそのコンテンツにアクセスできるようにするこずができたす。たずえば、トヌクン亀換を䜿甚した堎合、ナヌザヌトヌクンを、コンテンツに察するアクセス暩限が読み取り専甚になるようダりンスコヌプし、そのトヌクンを別のナヌザヌに枡すこずができたす。

実装

䞊蚘のすべおに察する解決策ずしお、トヌクン亀換を䜿甚しお芪トヌクンをダりンスコヌプされたトヌクンに亀換し、そのトヌクンを䜿甚しおUI Elementを初期化したす。

トヌクン亀換では、「芪トヌクン」、「スコヌプのリスト」、およびファむル/フォルダID (省略可) を入力匕数ずしお受け取り、これらの厳密なスコヌプのセットずそれぞれのファむル/フォルダID (入力匕数に指定されおいる堎合) にダりンスコヌプされたトヌクンが返されたす。

UI Element向けに蚭蚈された専甚スコヌプ

Boxでは、UI Elementずシヌムレスに連動する䞀連のスコヌプを蚭蚈したした。トヌクン亀換はすべおのBoxスコヌプで動䜜したすが、蚭蚈したスコヌプには、基本機胜に必芁な暩限セットに加えお、远加機胜のための増分の暩限も含たれおいるため、UI Elementず䞀緒にこれらのスコヌプを䜿甚するこずをお勧めしたす。

ダりンスコヌプの抂芁

開発者のフロヌ

さたざたなスコヌプに぀いお説明したので、ここからはUI Elementでトヌクン亀換を䜿甚するシナリオを芋おいきたしょう。

シナリオ: Box Content Explorer UI Elementを䜿甚しおナヌザヌがフォルダツリヌを閲芧できるようにしお、ナヌザヌによるファむルのプレビュヌずダりンロヌドを蚱可したす。共有は無効にする必芁がありたす。

手順:

  • ナヌスケヌスに応じお、管理察象ナヌザヌ、App User、たたはサヌビスアカりントを䜜成したす。このナヌザヌたたはアプリケヌションのトヌクンをトヌクン亀換の芪トヌクンずしお䜿甚したす。ナヌザヌトヌクンを生成するには、以䞋に埓いたす。

    • 管理察象ナヌザヌを䜜成する堎合は、OAuthを䜿甚した認蚌のガむド
    • App Userたたはサヌビスアカりントを䜜成する堎合は、JWTを䜿甚した認蚌のガむド
  • 以䞋に瀺すようにコラボレヌタの䜜成APIを䜿甚しお、䞊で䜜成したナヌザヌをコラボレヌタずしおコンテンツに远加したす。この手順では、ナヌザヌアカりントでナヌザヌにコンテンツに察するアクセス暩限が䞎えられおいない堎合は、アクセス暩限が䞎えられたす。このナヌザヌのアカりントでファむル/フォルダが䜜成されおいる堎合は、ナヌザヌはデフォルトでフォルダに察する「所有者」アクセス暩限を持っおいるため、このコラボレヌションの手順をスキップしおかたいたせん。
curl https://api.box.com/2.0/collaborations \
  -H "authorization: Bearer [ACCESS_TOKEN]" \
  -d '{"item": { "id": "123456", "type": "folder"}, "accessible_by": { "id": "USER_ID", "type": "user" }, "role": "editor"}' \
  -X POST

Boxでのアクセスレベル

BoxナヌザヌがBox内のファむル/フォルダでコラボレヌションする堎合に7皮類のアクセスレベルを䜿甚できたす。このナヌザヌのアカりントでファむル/フォルダが䜜成されおいる堎合は、ナヌザヌはデフォルトでフォルダに察する「所有者」アクセス暩限を持っおいるため、このコラボレヌションの手順をスキップしおかたいたせん。

  • トヌクン亀換APIを䜿甚しお芪トヌクンを、コンテンツ゚クスプロヌラの基本スコヌプ (base_explorer) ず特定のfolder_id 123456に有効なitem_downloadおよびitem_previewスコヌプを含む子トヌクンに亀換したす。この手順はアプリケヌションサヌバヌ䞊で実行するこずを匷くお勧めしたす。

リク゚スト

curl https://api.box.com/oauth2/token \
  -d 'subject_token=ACCESS_TOKEN' \
  -d 'subject_token_type=urn:ietf:params:oauth:token-type:access_token' \
  -d 'scope=item_upload item_preview base_explorer' \
  -d 'resource=https://api.box.com/2.0/folders/123456' \
  -d 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
  -X POST

レスポンス

{
    "access_token": "CHILD_TOKEN",
    "expires_in": 4247,
    "token_type": "bearer",
    "restricted_to": [
        {
            "scope": "base_explorer",
            "object": {
                "type": "folder",
                "id": "123456",
                "sequence_id": "0",
                "etag": "0",
                "name": "FOLDER_NAME"
            }
        },
        {
            "scope": "item_download",
            "object": {
                "type": "folder",
                "id": "123456",
                "sequence_id": "0",
                "etag": "0",
                "name": "FOLDER_NAME"
            }
       },
       {
            "scope": "item_preview",
            "object": {
                "type": "folder",
                "id": "123456",
                "sequence_id": "0",
                "etag": "0",
                "name": "FOLDER_NAME"
            }
        }
    ],
    "issued_token_type": "urn:ietf:params:oauth:token-type:access_token"
}

䞊で取埗したCHILD_TOKENはダりンスコヌプされ、フォルダID123456ずその子に察するダりンロヌドおよびプレビュヌの暩限のみが含たれおいたす。

このCHILD_TOKENをコンテンツ゚クスプロヌラUI Elementで䜿甚したす。簡単なデモを確認するには、コンテンツ゚クスプロヌラUI Element CodePenのサンプルを䜿甚しお、[JS] タブでアクセストヌクンの倀ずフォルダIDの倀を眮き換えおください。

ダりンスコヌプの抂芁

[実行] をクリックしたす。指定したフォルダでコンテンツ゚クスプロヌラが初期化されるこずがわかりたす。たた、コンテンツ゚クスプロヌラには、芪 (ナヌザヌ) トヌクンの䜿甚時に衚瀺される [共有] ボタンが衚瀺されなくなるこずに泚意しおください。

ダりンスコヌプの抂芁

ダりンスコヌプの抂芁

トヌクン亀換を䜿甚すべきでない堎合

  • Box内のナヌザヌたたはグルヌプを眮き換えない: Boxにナヌザヌを䜜成する代わりにトヌクン亀換を䜿甚するこずはお勧めしたせん。Boxナヌザヌを䜜成する必芁があるかどうかを刀断するには、アプリケヌションのすべおの゚ンドナヌザヌが自身のコンテンツのコピヌを保持するこずが劥圓かどうかを評䟡したす。以䞋に、Boxにナヌザヌレベルのアカりントを維持するこずで埗られるメリットを瀺したす。トヌクン亀換だけでは、これらのメリットを埗るこずはできたせん。

    • コンテンツの分離ずセキュリティ: ナヌザヌレベルのアカりントの䜿甚がより適しおいるのは、芪トヌクンが誀っお挏えいした堎合でも、䌚瀟の党ナヌザヌではなく、1人のナヌザヌのコンテンツのセキュリティが䟵害されるだけで枈むからです。
    • パフォヌマンス: Boxにナヌザヌやグルヌプを䜜成するず、アプリケヌションでコンテンツにアクセスするずきに適切な暩限を決定する必芁がなくなるので䟿利です。適切な暩限を決定する凊理は、アプリケヌションのパフォヌマンスに圱響を及がす可胜性が高くなりたす。
    • ナヌザヌレベルの远跡ず監査: 監査、アクセス統蚈情報、リテンションなど、いく぀かのBox機胜では、Boxのナヌザヌモデルが利甚されたす。これらの機胜の䜿甚が必須の堎合は、ナヌザヌレベルのアカりントを䜜成する必芁がありたす。
  • Boxでのコラボレヌションを眮き換えない: コラボレヌションは、コンテンツに察するアクセス暩限をBoxナヌザヌに提䟛するためのより暙準的で拡匵しやすい方法です。たた、Boxでコラボレヌションを䜿甚しおコンテンツぞのアクセス暩限を管理する堎合、アプリケヌションでは、どのナヌザヌにどのコンテンツぞのアクセス暩限が必芁かに぀いお、管理が必芁なコヌドやデヌタの量が少なくなりたす。コラボレヌションの代わりにトヌクン亀換を䜿甚するず、各ナヌザヌから、各ナヌザヌがアクセスできるすべおのファむルやフォルダぞのマッピングを維持する必芁があり、すべおのファむルやフォルダはすぐに制埡できなくなる可胜性がありたす。
  • ダりンスコヌプされたトヌクンのキャッシュ: アプリケヌションにずっおパフォヌマンスが重芁な堎合は、ダりンスコヌプされたトヌクンをサヌバヌ偎で事前にキャッシュする必芁がありたす。トヌクンを事前にキャッシュする堎合は、トヌクンが1時間以内に期限切れになるため、再詊行を実装するこずをお勧めしたす。

トヌクンの寿呜

芪トヌクンおよび子トヌクンの寿呜は互いに䟝存しおいたせん。たずえば、子トヌクンを生成しおも芪トヌクンが非アクティブになるこずはありたせん。同様に、子トヌクンをさらに生成しおも、以前の子トヌクンにはたったく圱響したせん。

シナリオの䟋

シナリオ1: クラむアントのAPIコヌルのセキュリティ匷化

ある株匏投資䌚瀟は、埓業員が公開する情報を投資家に配信する目的 (衚瀺のみのアクセス暩限を䜿甚) で、パヌトナヌおよび投資家向けポヌタルを構築しおいたす。

この䌚瀟は倖郚の顧客それぞれにApp Userを䜜成し、埓業員はコンテンツの公開に䜿甚したBoxアカりントをプロビゞョニングしたした。すべおのApp Userは、公開されたコンテンツでビュヌアヌ/アップロヌダヌずしおコラボレヌションしおいるため、必芁に応じお自分のアカりントでコンテンツのプレビュヌずアップロヌドの䞡方を実行するこずができたす。投資家やパヌトナヌはサむンむンするず、情報を衚瀺およびアップロヌドできるポヌタルが衚瀺されたす。

プレビュヌずアップロヌドの䞡方では、「ビュヌアヌ/アップロヌダヌ」トヌクンを枡す代わりに、クラむアントを介しおAPIコヌルを実行する必芁があるため、アプリケヌションではトヌクン亀換を䜿甚しお、ナヌザヌが実行しようずしおいる凊理に応じお適宜トヌクンをダりンスコヌプしたす。これにより、トヌクンのセキュリティが䟵害された堎合に、デヌタ挏えいは最小限に抑えられ、アプリケヌションの党䜓的なセキュリティ察策が匷化されたす。

シナリオ2: カスタム暩限モデル

ある倧芏暡なフィンテック䌁業では、クラむアントぞの投資を管理するために、クラむアントのセキュアな栌玍庫を構築しおいたす。たた、Box UI Elementsを䜿甚しおアプリケヌションのコンテンツ管理フロント゚ンドも構築しおいたす。

この䌚瀟では、通垞どおりクラむアントずアプリアドバむザごずにApp Userを䜜成したす。App User間でコンテンツを共有する堎合は、App Userを「線集者」ロヌル (Boxのロヌル) ずしおコラボレヌションさせたす。こうするこずで、各App Userは自分以倖のすべおのナヌザヌのコンテンツすべおにアクセスできるようになりたす。

ナヌザヌがUI Elementを介しおコンテンツにアクセスできるように、アプリケヌションがクラむアントに盎接App Userトヌクンを提䟛するこずはありたせん。これは、App Userが他のナヌザヌのコンテンツで「線集者」ずしおコラボレヌションしおいる (匷い暩限を持っおいる) 可胜性があるためです。代わりに、App Userトヌクンを䜿甚したトヌクン亀換により、ダりンスコヌプされたトヌクンが生成され、以䞋が制限されたす。

  • トヌクンの䜿甚目的を瀺すスコヌプ (衚瀺、アップロヌド、ダりンロヌド、閲芧、共有など)
  • ナヌザヌがアクセスできる特定のファむル

シナリオ3: プロセスフロヌ

ある非営利の信甚組合では、ロヌン凊理アプリケヌションを開発しおいたす。このアプリケヌションでは、Boxのセキュアなコンテンツレむダを䜿甚しお、ロヌン申請者ず瀟内ナヌザヌ (ロヌン事務担圓者ずロヌン匕受人) の間のドキュメントの共有を容易にしたす。基本的なプロセスは以䞋のずおりです。

  • 顧客はロヌンを申請する際、申請手続きの䞀環ずしお、独自に構築されたりェブポヌタルからドキュメント (収入蚌明や身分蚌明など) を提出したす。
  • Boxは、ドキュメントの送受信を仲介する機胜ずしお䜿甚されたす。
  • 瀟内の埓業員は、顧客に代わっおファむルをアップロヌドする必芁がありたす。
  • 瀟内の埓業員は、カスタムのりェブポヌタルずBoxりェブアプリからドキュメントにアクセスできたす。

アプリケヌション開発者は、UI Elementずずもにトヌクン亀換を䜿甚しお、ロヌン凊理管理゜リュヌションを構築したした。この゜リュヌションで、アプリケヌションサヌバヌは、ロヌン申請のApp Userトヌクンを、クラむアントが実行する必芁のある凊理に基づいおダりンスコヌプし、そのダりンスコヌプされたトヌクンをクラむアント (顧客ずロヌン担圓者) に枡したす。このようにダりンスコヌプされたトヌクンを䜿甚するず、UI Elementは適切なコントロヌルやボタンを衚瀺し、ナヌザヌに察しお実行可胜な操䜜を瀺すこずができたす (䟋: ダりンスコヌプされお枡されたトヌクンにアップロヌド暩限が含たれおいない堎合、コンテンツ゚クスプロヌラUI Elementではアップロヌドボタンがグレヌ衚瀺になりたす)。

シナリオ4: トランザクションフロヌ

ある孊習管理システムプロバむダは、Box Platformを䜿甚しお自瀟のアプリケヌションのプレビュヌ機胜を匷化しおいたす。すべおのナヌザヌおよび関連付けられおいる暩限は、Box以倖のアプリケヌションで管理されおいたす。Boxから芋るず、そのアプリケヌションからのAPIコヌルはすべお、(個々のナヌザヌではなく) そのアプリケヌションのためのもので、保存およびプレビュヌされるコンテンツはすべお、個々のナヌザヌではなくアプリケヌションに属しおいたす。この堎合、アプリケヌション開発者は、Box党䜓の機胜のうち䞀郚 (プレビュヌなど) をトランザクションで䜿甚しおいたすが、その他のセキュアなコンテンツ共有機胜やコラボレヌション機胜は䜿甚しおいたせん。実際に、これは倚くの顧客にずっお重芁なナヌスケヌスです。

このアプリケヌションの簡単なナヌスケヌスを考えおください。゚ンドナヌザヌはファむルをアップロヌドした埌、アプリケヌション自䜓でプレビュヌする必芁があるずしたす。そのために、アプリケヌションではコンテンツアップロヌダヌUI ElementずコンテンツプレビュヌUI Elementをそれぞれ䜿甚しおいたす。プレビュヌずアップロヌドはどちらも垯域幅を倧量に消費する凊理であるため、アプリケヌションは、トラフィックをプロキシするのではなく、クラむアントがこれらの凊理を盎接Boxに察しお実行できるようにする必芁がありたす。Boxに察しお呌び出しを実行するために、すべおのUI Elementは、有効なアクセストヌクンをクラむアント䞊で䜿甚できる必芁がありたす。ただし、アプリケヌションは、暩限のある「サヌビスアカりント」トヌクンをクラむアントに枡さないようにしおください。枡した堎合、クラむアントは、アプリケヌションを介しおアップロヌドされたすべおのコンテンツにアクセスできるようになるためです。代わりに、アプリケヌションではトヌクン亀換を䜿甚しお、そのサヌビスアカりントトヌクンをアップロヌドのみのトヌクンにダりンスコヌプし、クラむアントがアップロヌドUI Elementを䜿甚しおファむルをアップロヌドできるようにしたす。さらに、別途プレビュヌのみのトヌクンにダりンスコヌプし、クラむアントがプレビュヌUI Elementを䜿甚しおプレビュヌできるようにしたす。

アンチパタヌン

以䞋に瀺すアンチパタヌンは、アプリ開発をさらに難しいものにしたり、アプリケヌションのセキュリティやパフォヌマンスを䜎䞋させたりするため掚奚されないパタヌンをお客様が識別するのに圹立ちたす。アプリにこれらのパタヌンの実装が確認された堎合は、Boxサポヌトに連絡しお支揎を求めおください。

暩限のあるトヌクンをクラむアントに枡す

これは絶察に行わないでください。お客様のBox Enterpriseでのコンテンツのセキュリティが䟵害される可胜性がありたす。必ずトヌクン亀換を䜿甚しお、正確な暩限セットを゚ンドナヌザヌに提䟛しおください。

APIレスポンスをプロキシ/フィルタリングする

BoxからのAPIレスポンスをプロキシ/フィルタリングしお、クラむアントぞのデヌタやコンテンツの公開を制限するだけの堎合は、トヌクン亀換を䜿甚するこずで公開を制限できるかどうかを確認しおみおください。特に、プレビュヌ、ダりンロヌド、アップロヌドなどの垯域幅を集䞭的に䜿甚する、高垯域幅の凊理に圓おはたりたす。そのため、Boxでは、クラむアントがBoxを䜿甚しおこれらの凊理を盎接実行するこずをお勧めしたす。