以前にAzure ADで認証した(プロトコルはOpen ID Connect)APEXアプリから、Microsoft Graph APIを呼び出せることを確認しています。同様の確認をGoogleアカウントで行ってみました。
確認のためにAPEXアプリを作成し、Google Drive APIを呼び出しています。MS Graph APIのときと同様に、APIの呼び出しはできました。
作成済みのGoogleのプロジェクトで、Google Drive APIを有効にしたところから始めます。
OAuth同意画面を設定します。画面左のメニューより、OAuth同意画面を選択します。
今回はテストなので外部を選びます。Google Workspaceを利用している場合は、内部を選ぶことができるようです。
作成をクリックします。
アプリ名は任意です。今回はAPEX Google Driveとしています。ユーザーサポートメールは、今回のようなケースではこのコンソールにサインインしている人のメール・アドレスを指定することになると思います。必須ではないようですが、アプリのロゴとなる画像をアップロードしています。
それ以外で必須の情報はデベロッパーの連絡先情報です。このコンソールにサインインしている人のメール・アドレスを指定しています。
今回の作業はAlways FreeのAutonomous Databaseで行っています。そのため承認済みドメインはoraclecloudapps.comになります。認証情報の設定時に自動で追加されるため、このページでは必ずしも設定する必要はありません。
フィルタにGoogle Drive APIを指定します。次のスコープを選択します。
https://www.googleapis.com/auth/drive
画面ではhttps://www.googleapis.com/auth/docsも指定していますが、APEXアプリケーションでは指定しないため不要です。
APIの呼び出しに必要なスコープは、Google Drive APIのReferenceのそれぞれのAPIの説明のAuthorizationのセクションに記載されています。
このスコープは、Googleドライブのすべてのファイルの表示、編集、作成、削除なので、非常に強い権限になります。
スコープを選択して、更新します。
保存して次へ進みます。
以上でOAuth同意画面の設定は完了です。
APEXのベースURLにapex_authentication.callbackを繋げます。
Google Drive APIを呼び出すボタンを作成します。
識別のボタン名をSUBMIT、ラベルをSubmitとします。動作のアクションとして動的アクションで定義を選択します。
新規にリージョンを作成します。
識別のタイトルはGoogle API Responseとします。タイプとして動的コンテンツを選択します。
ソースのCLOBを返すPL/SQLファンクション本体として、以下を記述します。
送信するページ・アイテムとしてP1_GOGLE_APIを設定します。
ボタンSUBMITをクリックしたときに、リージョンGoogle API Responseをリフレッシュする動的アクションを作成します。
ボタンSUBMIT上で動的アクションの作成を実行します。
識別のタイトルはClick Submitとします。タイミングはデフォルトで、イベントがクリック、選択タイプはボタン、ボタンとしてSUBMITが設定されます。
TRUEアクションの識別の名前はCall Google API、アクションとしてリフレッシュを選択します。影響を受ける要素の選択タイプはリージョン、リージョンはGoogle API Responseを指定します。
以上でGoogle Drive APIを呼び出して応答を確認するページは完成です。
ページを実行し、テストしてみます。
Google Drive APIとして以下を指定し、結果を確認します。
Google Drive APIがAPEXのアプリケーションにサインインしたユーザーの権限で実行されているが確認できます。また、pageTokenとnextPageTokenを使用したページ送りやfields指定が有効なことも確認できます。
テストユーザーを追加します。
これから作成するAPEXアプリケーションにサインインする開発者を追加します。
保存して次へ進みます。
続いて認証情報を設定します。
画面右より認証情報を開き、認証情報の作成からOAuthクライアントIDを選択します。
認証情報の作成に必要な情報を入力します。
アプリケーションの種類はウェブアプリケーションです。選択した種類によって入力する情報が変わります。承認済みのJavaScript生成元、承認済みのリダイレクトURIの入力が無い場合は、アプリケーションの種類の選択が間違っています。
アプリケーションの名前は任意です。今回はAPEX Google Driveとしています。
以下はAlways FreeのAutonomous Databaseでの例です。
承認済みのJavaScript生成元は以下のような指定になります。
https://ADBの識別子-データベース名.adb.リージョン名.oraclecloudapps.com
承認済みのリダイレクトURIは以下になります。
https://ADBの識別子-データベース名.adb.リージョン名.oraclecloudapps.com/ords/apex_authentication.callback
作成をクリックします。
OAuthクライアントを作成しましたとポップアップが開きます。JSONをダウンロードをクリックして認証情報をファイルに保存します。
2段階認証を設定している場合は、認証を求められます。
アプリケーションのホーム・ページが開きます。
このファイルの内容より、Oracle APEXのWeb資格証明を作成します。
以上でGoogle側での作業は完了です。
一応、承認済みドメインの設定を確認しておきます。承認済みのJavaScript生成元、承認済みのリダイレクトURIとして設定したURLのトップドメインが設定されているはずです。
Oracle APEX側の作業に移ります。
アプリケーション・ビルダーからワークスペース・ユーティリティを開きます。
ワークスペース・ユーティリティよりWeb資格証明を開きます。
作成済みのWeb資格証明が一覧されます。
作成をクリックします。
名前はGoogle Drive Credentialとします。静的識別子はGOOGLE_DRIVE_CREDとしています。(Googleのコンソールでアプリにスコープを追加すると、Google Drive以外のAPIも呼び出せるはずです。そのような計画があるときはWeb資格証明にGoogle Driveという名前はつけない方がよいかもしれません。)
認証タイプはOAuth2クライアント資格証明フローです。クライアントIDまたはユーザー名には、ダウンロードしたJSONファイルに含まれるclient_idの値を入力します。クライアント・シークレットまたはパスワードにはclient_secretの値を入力します。
以上で作成をクリックします。
新たにWeb資格証明Google Drive Credentialが作成されました。
スクリーンショットには他にも色々なWeb資格証明があります。これらのWeb資格証明を使ったAPI連携は、すべて本ブログの記事として公開しています。
Google Drive APIを呼び出すAPEXアプリケーションを作成します。
アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前はAPEX Google Driveとします。
アプリケーションの作成をクリックします。
最初に認証スキームを作成します。
共有コンポーネントの認証スキームを開きます。
作成をクリックします。
スキームの作成はギャラリからの事前構成済スキームに基づくを選択します。
次へ進みます。
認証スキームの名前はGoogle Accountとします。スキーム・タイプとしてソーシャル・サインインを選択します。
設定の資格証明ストアとして、先ほど作成したGoogle Drive Credentialを選択します。認証プロバイダはGoogleです。有効範囲(スコープのこと)に以下を指定します。
profile,email,https://www.googleapis.com/auth/drive
ユーザー名としてemailを指定します。メール・アドレスでは一意性を保証できない場合はsubを指定した方が良いかもしれません。ユーザー名の大文字への変換は、APEXのデフォルトに合わせてはいに変更します。
以上で認証スキームの作成をクリックします。
認証スキームGoogle Accountが作成され、カレントの認証スキームになります。
アプリケーションを実行します。
Googleにログインが求められます。Chromeを利用していてGoogleにログイン済みの場合はスキップされるようです。OAuth同意画面の設定で、テストユーザーとして登録してユーザーのメール・アドレスを入力します。
初回アクセス時に、このアプリはGoogleで確認されていませんと表示されます。
続行をクリックします。
このアプリがGoogleドライブのすべてのファイルの表示、編集、作成、削除(つまりスコープhttps://www.googleapis.com/auth/driveで可能な作業)を行なうことを許可します。
チェックを入れて、続行します。
以上でGoogleを使用したソーシャル・サインインの認証を構成できました。
Google Drive APIを呼び出す機能を実装します。MS Graph APIを呼び出すアプリと、ほとんど同じです。
APIを呼び出す機能は、ホーム・ページに実装します。
Bodyにページ・アイテムを作成します。
識別の名前はP1_GOOGLE_API、タイプはテキスト・フィールド、ラベルはGoogle APIとします。このページ・アイテムにGoogle Drive APIのURLを入力します。Google Drive APIを呼び出すボタンを作成します。
識別のボタン名をSUBMIT、ラベルをSubmitとします。動作のアクションとして動的アクションで定義を選択します。
新規にリージョンを作成します。
識別のタイトルはGoogle API Responseとします。タイプとして動的コンテンツを選択します。
ソースのCLOBを返すPL/SQLファンクション本体として、以下を記述します。
ボタンSUBMITをクリックしたときに、リージョンGoogle API Responseをリフレッシュする動的アクションを作成します。
ボタンSUBMIT上で動的アクションの作成を実行します。
識別のタイトルはClick Submitとします。タイミングはデフォルトで、イベントがクリック、選択タイプはボタン、ボタンとしてSUBMITが設定されます。
TRUEアクションの識別の名前はCall Google API、アクションとしてリフレッシュを選択します。影響を受ける要素の選択タイプはリージョン、リージョンはGoogle API Responseを指定します。
以上でGoogle Drive APIを呼び出して応答を確認するページは完成です。
ページを実行し、テストしてみます。
Google Drive APIとして以下を指定し、結果を確認します。
https://www.googleapis.com/drive/v3/files?pageSize=5&fields=nextPageToken,files(kind,mimeType,id)
今回の作業は以上になります。
作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/apex-google-drive.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完