box で Client Credentials Grant がサポートされたので試す


先日、boxのクライアントアプリの認証に Client Credentials Grant がサポートされたことが発表されました。

https://medium.com/box-developer-blog/client-credentials-grant-f533856f55be
https://developer.box.com/changelog/#2020-11-17-client-credentials-grant

これまで、boxのクライアントアプリの認証は以下の2つが提供されていました。

  • サーバー認証 (JWT使用)
  • ユーザー認証 (OAuth 2.0)

ここに今回 Client Credentials Grant が追加されました。

  • サーバー認証 (クライアント資格情報の許可) ⭐️ NEW!!

それではClient Credentials Grant を利用する準備をしていきます。
以下の準備が必要です。

  • 2要素認証の設定がされていること
  • Client Credentials Grant を利用するカスタムアプリが承認されていること

開発者コンソール(以下URL)にアクセスします。

https://cloud.app.box.com/developers/console

新しくアプリを作成します。カスタムアプリで作成します。
先ほどの画面が表示されるので、サーバー認証 (クライアント資格情報の許可) を選択します。

Client Credentials Grant を利用できるアプリが作成されました。

構成 - OAuth 2.0資格情報 に クライアントID と クライアント機密コードが記載されています。
ここでクライアント機密コードを確認する際に2要素認証が必要となります。

あとはこのアプリが利用する環境に応じてアプリケーションアクセスやアプリケーションスコープを設定します。
次にこのアプリの承認が必要となります。一般設定 - アプリの承認 からアプリの承認を行います。
※管理者とアプリ作成者が同じ前提で記載してます。

承認が行われると以下のようになります。これで利用準備ができた状態になります。

先ほど確認したクライアントIDとクライアント機密コードを利用して、以下のサンプルにならって
アクセストークンを取得するリクエストを実行します。

https://developer.box.com/guides/authentication/jwt/without-sdk/#client-credentials-grant

レスポンスからアクセストークンを取得できました。

{
  "access_token":"aaa.......zzz",
  "expires_in":4183,
  "restricted_to":[],
  "token_type":"bearer"
}

アクセストークンの有効期限は60分と記載されていますが、それよりも少し長いようです。

https://developer.box.com/guides/api-calls/permissions-and-errors/expiration/

サーバからboxに対して処理を実行する場合、これまではキーペアを生成してJWTアサーションを作成して認証する方法をとっていました。
今回のboxのサポートによって、Client Credentials Grant を利用して処理を実行することもできるようになります。

複数の方式に対応したので選択肢としては増えたと思いますが、個人的にはJWTアサーションをそのまま使い続けると思います。