本記事ではLINE Developersコンソールよりプロバイダーとチャネルを作成し、APEXアプリケーションの認証スキームとしてLINEを使用できるようにします。
LINE Developersコンソールを開きます。URLはhttps://developers.line.biz/console/です。ログインをしていない場合は、ログイン画面が表示されます。私はビジネスアカウントを持っていないので、LINEアカウントでログインしました。
LINE Developersコンソールが開いたら、最初にプロバイダーを作成します。
作成を実行します。
プロバイダーYuji N, Oracle APEX Developerが作成されました。
LINEログインのチャネルの作成から始めます。
チャネルの種類、プロバイダーは設定済みです。サービスを提供する地域は(この記事の読者は日本人でしょうから)日本でしょう。会社・事業者の所在国・地域も日本でしょう。
プライバシーポリシーURL、サービス利用規約URLは現時点では入力をスキップします。アプリケーションを作成し本番利用することがあれば、それまでには準備が必要でしょう。
LINE開発者契約の内容に同意しますにチェックを入れ、作成をクリックします。
チャネルが作成されます。
チャネル基本設定のチャネルIDは、APEXのWeb資格証明を作成する際に、クライアントIDまたはユーザーIDとして設定します。コピーを取得して保存しておきます。
チャネルシークレットはAPEXのWeb資格証明のクライアント・シークレットまたはパスワードとして設定します。コピーを取得して保存しておきます。
APEXの置換文字列APP_USERにメールアドレスを使いたい場合は、申請が必要です。申請をクリックして、いくつかの必要な情報を更新します。
一度申請をすると変更できないようです。その場合は、チャネルを作り直す必要があります。
LINEログイン設定のタブを開き、コールバックURLを設定します。編集をクリックします。
コールバックURLとしてhttps://APEXが動作しているホスト名/ords/apex_authentication.callbackを設定します。apex_authentication.callbackより前の部分は、APEXのURLのベースパスです。
Autonomous Databaseの場合、以下のような形式です。
https://ユニークなID-インスタンス名.adb.リージョン.oraclecloudapps.com/ords/apex_authentication.callback
LINE側の設定は一旦完了として、Oracle APEX側の設定に移ります。
ワークスペース・ユーティリティのWeb資格証明を開きます。
作成済みのWeb資格証明の一覧より作成をクリックし、作成フォームを表示します。
名前はLINE Account、静的識別子はLINE_ACCOUNT、認証タイプとしてOAuth2クライアント資格証明フローを選択します。
クライアントIDまたはユーザーIDとして、LINEのチャネル基本設定のチャネルID、クライアント・シークレットまたはパスワードとして、LINEのチャネル基本設定のチャネルシークレットを指定します。
以上で作成をクリックします。
Web資格証明に続いて、APEXアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。名前はAPEX Demo Appとします。
アプリケーションの作成をクリックします。
アプリケーションが作成されたら、共有コンポーネントの認証スキームを開きます。
作成をクリックします。
次へ進みます。
設定の資格証明ストアとして、先ほど作成したWeb資格証明LINE Accountを選択します。認証プロバイダとしてOpenID Connectプロバイダを選択します。
LINEのOpen ID Connectの検出URLは以下になります。
https://access.line.me/.well-known/openid-configuration
有効範囲(scope)としてprofileを指定します。openidはAPEXがデフォルトで有効範囲に含めます。またemailについてはLINE側で許可を与えていないため、有効範囲には含めません。
ユーザー名は#sub# (#APEX_AUTH_NAME#)とし、ユーザー名の大文字への変換はいいえとします。
以上で認証スキームの作成をクリックします。
認証スキームLINE Accountが作成され、カレントの認証スキームに設定されます。
LINEのログイン画面が表示されます。
認証スキームのユーザー名に設定した値#sub# (#APEX_AUTH_NAME#)が置換文字列APP_USERの値になります。APP_USERの値は一意であることが求められるため、属性subとAPEX_AUTH_NAMEの組み合わせ(Open ID Connectによる認証は、複数のプロバイダを切り替えられるように実装することが多い)が使用されています。
そのような理由はあるのですが、画面上の表示には不向きです。そのため、画面上にはLINEからの応答に含まれる属性nameを表示するようにAPEXアプリケーションを変更します。
属性nameの値をAPEXアプリケーションに保持するために、アプリケーション・アイテムを作成します。
共有コンポーネントのアプリケーション・アイテムを開きます。
名前はG_DISPLAY_NAMEとします。有効範囲はアプリケーション、セキュリティのセッション・ステート保護は一番厳しいデフォルトの制限付き - ブラウザから設定不可を選択します。
アプリケーション・アイテムの作成をクリックします。
アプリケーション・アイテムG_DISPLAY_NAMEが作成されます。
ユーザー名が表示されているナビゲーション・バーの設定を変更します。
共有コンポーネントのナビゲーション・バー・リストを開きます。
ナビゲーション・バーを開きます。
名前が&APP_USER.となっているエントリの鉛筆アイコンをクリックし、そのエントリの編集画面を開きます。
エントリのセクションにあるリスト・エントリ・ラベルを&APP_USER.から&G_DISPLAY_NAME.に変更します。
ユーザー定義属性のセクションの2. List Item CSS Classesに設定されているhas-usernameの指定を削除します。この指定があると、ユーザー名が小文字に変換されて表示されるためです。
以上の変更を行い、変更の適用をクリックします。
ナビゲーション・バーの変更の適用を行います。
認証スキームに認証後のプロシージャを記述し、LINEの応答に含まれる属性nameをアプリケーション・アイテムG_DISPLAY_NAMEに設定します。
認証スキームLINE Accountを開き、設定の追加ユーザー属性としてnameを指定します。
ソースのPL/SQLコードに以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
procedure post_auth is | |
begin | |
:G_DISPLAY_NAME := apex_json.get_varchar2('name'); | |
end post_auth; |
ログイン・プロセスの認証後のプロシージャ名としてpost_authを指定します。
以上で変更の適用をクリックします。
APEXアプリケーションをログアウトし再度ログインすると、ナビゲーション・バーにLINEのログイン画面に表示されていた名前が表示されます。
実装したのは認証スキームだけですが、今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/apex-demo-app-line.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完