本記事では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コードに以下を記述します。
ログイン・プロセスの認証後のプロシージャ名としてpost_authを指定します。
以上で変更の適用をクリックします。
APEXアプリケーションをログアウトし再度ログインすると、ナビゲーション・バーにLINEのログイン画面に表示されていた名前が表示されます。
実装したのは認証スキームだけですが、今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/apex-demo-app-line.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完