2023年1月19日木曜日

Microsoft OneDriveを操作するAPEXアプリの作成(1) - Azure ADへのアプリ登録

 Microsoft OneDrive上のファイルの一覧、ファイルのアップロード、削除といった作業を行うAPEXアプリケーションを作成します。

作成したアプリケーションは以下のように動作します。実用的とはいえませんが、ファイルやフォルダの一覧表示、作成、更新、削除といったOneDriveの基本的な操作を行うGraph APIの呼び出しは実装しています。


アプリケーションのエクスポートは以下に置いてあります。
https://github.com/ujnak/apexapps/blob/master/exports/onedrive-operation.zip

Microsoft 365 Personalのサブスクリプションを契約していることが前提です。Microsoft 365の中では家庭向けの一番安価なサブスクリプションなので、より多くの機能を含むその他のサブスクリプションでも同様に作業ができるでしょう。Microsoft 365のサブスクリプションには1ユーザーあたり1TBのクラウド・ストレージが含まれています。

作成するAPEXアプリケーションは、Azure Active DirectoryをIdPとしてOpen ID Connect(OIDC)でユーザー認証します。ユーザー認証時に取得したアクセス・トークンを使って、Microsoft Graph APIを呼び出します。結果として、APEXアプリにサインインしたユーザーによりOneDriveを操作します。

本記事ではMicrosoft Azure Active Directory側の作業として、アプリケーションを登録します。

Microsoft Azureのポータルより、Azure Active Directoryを開きます。


サイド・メニューのアプリの登録を開きます。

追加からアプリの登録を実行して、アプリの新規登録を開始することもできます。


クイックアクションアプリケーションの登録を追加からも、アプリの新規登録を開始できます。


アプリの登録の画面を開きます。登録済みのアプリケーションが一覧されます。

新規登録を実行します。


アプリケーションの名前は任意です。今回はAPEX App for OneDriveとしています。名前は後でも変更できます。

サポートされているアカウントの種類はAzure Active Directoryの契約状況に依存すると思いますが、個人向けMicrosoftアカウントのみでは機能しませんでした。今回は個人向けのMicrosoft 365の契約ユーザーにて認証させるため、任意の組織ディレクトリ内のアカウント(任意のAzure ADディレクトリ - マルチテナント)と個人のMicrosoftアカウント(Skype, Xboxなど)を選んでいます。

リダイレクトURIは、Oracle APEX側で認証応答を受け付けるURIです。APEXのサーバーのベース・パスにapex_authentication.callbackを付加したURIになります。省略可能となっていますが、APEXの認証では必須です。Autonomous DatabaseのAPEXの場合は、以下のようなパスになります。

https://<ADBのID>-<インスタン名>.adb.<リージョン名>.oraclecloudapps.com/ords/apex_authentication.callback

以上を設定し、登録を実行します。


アプリケーションが作成されます。

アプリケーション(クライアント)IDの情報をOracle APEX側のWeb資格証明クライアントIDとして登録するので、コピーしておきます。

左のメニューより証明書とシークレットを開きます。


証明とシークレットの画面が開きます。

新しいクライアント シークレット
を作成します。


説明として任意の文字列を入力します。今回は、APEXのWeb資格証明MS_AZURE_ADとして作成する予定なので、APEX Web Credential MS_AZURE_ADと入力しました。

有効期限は推奨の180 days (6 months)とします。

追加を実行します。


クライアント シークレットが生成されます。

の方がクライアント シークレットです。APEXのWeb資格証明に設定するため、必ずコピーをしておきます。


左のメニューよりAPIのアクセス許可を開き、アクセス許可の追加を実行します。

OneDriveの操作に使用するMicrosoft Graph APIに必要なアクセス許可を選びます。


画面右にドロワーが開きます。

アプリケーションに必要なアクセス許可の種類として、委任されたアクセス許可を選択します。

最初にOpenIdアクセス許可emailoffline_accessopenidprofileにチェックを入れます。正直なところ、今回の用途でこれらの許可がすべて必要なのか確信が持てないため、権限を与えすぎているかもしれません。


アクセス許可を選択するFilesと入力します。

OneDriveへのアクセス許可はFilesで始まります。リストされたアクセス許可のFiles.ReadWriteチェックを入れます。APEXアプリケーションにサインインしたユーザーが所有しているファイルの操作のみを許可します。

アクセス許可の更新をクリックします。


アクセス許可が更新されます。


以上でAzure Active Directory側のアプリケーションの登録は完了です。

Oracle APEXでは、OAuth2.0のImplicit Grantはサポートしていない(と聞いている)ため、認証暗黙的な許可およびハイブリッド・フローのチェックは不要なはずです。


ユーザーの追加などはAzure Active Directoryの操作なので、Microsoftから提供されているドキュメントを参照して作業を行います。


次の記事では、Oracle APEXにWeb資格証明を作成します。その後、作成したWeb資格証明を使ってユーザー認証を行うAPEXアプリケーションを作成します。

続く