ラベル Google Drive の投稿を表示しています。 すべての投稿を表示
ラベル Google Drive の投稿を表示しています。 すべての投稿を表示

2023年2月8日水曜日

Googleで認証してGoogle Drive APIを呼び出す

以前に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を利用している場合は、内部を選ぶことができるようです。

作成をクリックします。


OAuth同意画面の設定を行います。

アプリ名は任意です。今回は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ドライブのすべてのファイルの表示、編集、作成、削除なので、非常に強い権限になります。

スコープを選択して、更新します。


機密性の高いスコープとして、選択したスコープが追加されています。

保存して次へ進みます。


テストユーザーを追加します。

これから作成するAPEXアプリケーションにサインインする開発者を追加します。

保存して次へ進みます。



以上でOAuth同意画面の設定は完了です。


続いて認証情報を設定します。

画面右より認証情報を開き、認証情報の作成から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

APEXのベースURLapex_authentication.callbackを繋げます。

作成をクリックします。


OAuthクライアントを作成しましたとポップアップが開きます。JSONをダウンロードをクリックして認証情報をファイルに保存します。

このファイルの内容より、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同意画面の設定で、テストユーザーとして登録してユーザーのメール・アドレスを入力します。


パスワード
を入力します。


2段階認証を設定している場合は、認証を求められます。


初回アクセス時に、このアプリは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ファンクション本体として、以下を記述します。

送信するページ・アイテムとしてP1_GOGLE_APIを設定します。


ボタン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)


Google Drive APIがAPEXのアプリケーションにサインインしたユーザーの権限で実行されているが確認できます。また、pageTokenとnextPageTokenを使用したページ送りやfields指定が有効なことも確認できます。

今回の作業は以上になります。

作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/apex-google-drive.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。