Box Python SDKとJWTの使用

JSONウェブトークン (JWT) を使用するサーバー側の認証は、Box APIで認証するための最も一般的な方法です。JWTは、効果的にサーバー間認証を実現するよう設計されたオープンスタンダードです。

この記事では、JSONウェブトークン (JWT) を使用するBoxのサーバー側の認証の使用方法について説明します。

Box OAuth 2.0では、アプリケーションがユーザーのセキュリティコンテキスト内でユーザーに代わってAPIを呼び出しますが、JWTによるBoxのサーバー側の認証を使用する場合、アプリケーションには独自のセキュリティコンテキストがあるため、アプリケーションが特定のユーザーの代わりとなる場合もあれば、ならない場合もあります。

JWTを使用したサーバー側の認証は、以下に当てはまるアプリに最適な認証方法です。

  • Boxアカウントを持たないユーザーが使用する
  • 独自のIDシステムを使用する
  • ユーザーにBoxを使用していることを認識させたくない
  • アプリケーションのBoxアカウント内にデータを保存し、ユーザーのBoxアカウントには保存しない

要件

サンプルアプリ

こちらのリポジトリを複製すると、この演習の最終結果を確認できます。詳細については、readmeを参照してください。

Boxアプリの作成

JWTを使用するよう構成されたBoxアプリケーションが必要になります。

最初に、Box.comアカウントを取得する必要があります。

アカウントを取得したら、Box開発者コンソールに移動し、アプリを作成または構成します。

この例では、デフォルトのアプリケーションスコープで問題ありませんが、アプリの機能に応じて、アプリケーションスコープの変更が必要になる場合があります。

CORSドメインを設定します。

公開キーと秘密キーのペアを生成します。

config.jsonファイルがダウンロードされ、そのファイルに暗号化された秘密キーが含まれています。このキーは他の場所には保存されません。そのため、このファイルをなくした場合は、新しいキーペアを生成する必要があります。

このファイルは、後で認証を設定する際に使用します。

次に、承認を得るためにアプリを送信します。

Box.comのEnterprise管理者は、リクエストが記載されたメールを受け取ると、アプリの承認を続行できます。開発者アカウントを使用している場合は、自分でアプリを承認できます。

直接、管理コンソールのカスタムアプリマネージャに移動します。

JWTを使用したBoxのサーバー側の認証

JWTを使用してBoxに対して認証を受けるプロセスは簡単です。

手順1: JWTを使用して認証する

これは、Box Python SDKのJWTAuthクラスで処理されます。

from_settings_file() メソッドを使用して、ダウンロードしたconfig.jsonファイルを読み取ります。

store_tokensパラメータを使用して、アクセストークンを格納するためにcallableを渡します。

既存のアクセストークンを渡します。JWTAuthクラスは、有効なアクセストークンがまだあるかどうかを確認し、ない場合は自動的に新しいアクセストークンを取得します。

必要に応じて、各パラメータを手動で指定することもできます。以下に例を示します。

暗号化された秘密キーファイルへのパスがあることに注意してください。

authenticate_instance() メソッドが認証API呼び出しをトリガーすると、アクセストークンが返されます。

手順2: API呼び出しを行う

Clientクラスは、API呼び出しを行うための入り口で、JWTAuthインスタンスを受け入れます。これは、次のように簡単に指定できます。

JWTを使用する場合、(OAuth 2.0のように) 更新トークンはありません。アクセストークンの有効期限が切れると、JWT認証が再度使用されます。

まとめ

この例では、アクセストークンを必要とするUI Elements JavaScriptコンポーネントを使用しています。その他のJavaScriptオブジェクトと同様、これはブラウザツールを使用して確認できます。

トークンのダウンスコープ

より制限の厳しいアクセストークンを取得するために、アクセストークンを取得し、UI Elementsに付与された特定の権限を使用してそのトークンを「ダウンスコープ」します。各Elementはさまざまなアクセスレベルをサポートしています。

上記の例では、トークンの有効期限が切れているかどうかを確認するのではなく、flask_cachingを試しています。

ダウンスコープされたアクセストークンの使用

アプリは、UI Elementsで使用するアクセストークンが必要になるたびに、jwt_downscoped_access_token_get() メソッドを呼び出すことができます。

Clientクラスの使用

アプリでAPIを使用する必要がある場合は、Clientクラスをインスタンス化するだけです。

例えば、アップロードを保持するデモフォルダをアプリで作成する場合は、次のようになります。

また、アプリでデモフォルダ内のファイルを取得する場合は、次のようになります。

このJWTの例では、Box Python SDKとUI Elementsを組み合わせています。

この組み合わせにより、アプリは、独自のファイル、フォルダの所有権、その他すべてのBox機能が備わっているBoxユーザーとして動作することができます。

また、一からやり直して必要なすべてのインターフェースを設計する必要なく、アプリケーションのユーザーがBox.comに保存されているコンテンツを操作できるようにもなります。

Box Python SDKは、承認プロセスの管理に役立つほか、Box.com API全体へのアクセスも提供します。

あとは、いくつかアプリを作成するだけです。

--

--