2023年2月21日火曜日

LINEアカウントによる認証

本記事ではLINE Developersコンソールよりプロバイダーチャネルを作成し、APEXアプリケーションの認証スキームとしてLINEを使用できるようにします。

LINE Developersコンソールを開きます。URLはhttps://developers.line.biz/console/です。ログインをしていない場合は、ログイン画面が表示されます。私はビジネスアカウントを持っていないので、LINEアカウントでログインしました。

LINE Developersコンソールが開いたら、最初にプロバイダーを作成します。


プロバイダー名は任意です。個人の開発者、企業、組織を名前とします。今回はYuji N, Oracle APEX Developerとしました。本記事は実装例なので個人名、企業名、組織名ではありませんが、ユーザーが確認する同意画面に表示される情報なので、適切な名前を選ぶことをお勧めします。

作成を実行します。


プロバイダーYuji N, Oracle APEX Developerが作成されました。

LINEログインチャネル作成から始めます。


新規チャネル作成画面が開きます。

チャネルの種類プロバイダーは設定済みです。サービスを提供する地域は(この記事の読者は日本人でしょうから)日本でしょう。会社・事業者の所在国・地域日本でしょう。


チャネルアイコンの設定は任意です。チャネル名チャネル説明は必須なので、それぞれ入力します。アプリタイプとしてウェブアプリを選択します。


メールアドレスを指定します。開発者のメールアドレスがデフォルトで設定されていると思います。

プライバシーポリシーURLサービス利用規約URLは現時点では入力をスキップします。アプリケーションを作成し本番利用することがあれば、それまでには準備が必要でしょう。

LINE開発者契約の内容に同意しますチェックを入れ、作成をクリックします。


チャネルが作成されます。

チャネル基本設定チャネルIDは、APEXのWeb資格証明を作成する際に、クライアントIDまたはユーザーIDとして設定します。コピーを取得して保存しておきます。


下にスクロールします。

チャネルシークレットはAPEXのWeb資格証明のクライアント・シークレットまたはパスワードとして設定します。コピーを取得して保存しておきます。


さらに下にスクロールすると、Open ID Connectの設定項目としてメールアドレス取得権限があります。今回はメールアドレスを使わない設定を行います。そのため、ここは未申請のまま変更しません。



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

コールバックURLを設定して、更新をクリックします。


LINE側の設定は一旦完了として、Oracle APEX側の設定に移ります。

ワークスペース・ユーティリティWeb資格証明を開きます。


作成済みのWeb資格証明の一覧より作成をクリックし、作成フォームを表示します。

名前LINE Account静的識別子LINE_ACCOUNT認証タイプとしてOAuth2クライアント資格証明フローを選択します。

クライアントIDまたはユーザーIDとして、LINEのチャネル基本設定チャネルID、クライアント・シークレットまたはパスワードとして、LINEのチャネル基本設定チャネルシークレットを指定します。

以上で作成をクリックします。


Web資格証明に続いて、APEXアプリケーションを作成します。

アプリケーション作成ウィザードを起動します。名前はAPEX Demo Appとします。

アプリケーションの作成をクリックします。


アプリケーションが作成されたら、共有コンポーネント認証スキームを開きます。


作成をクリックします。


スキームの作成ギャラリからの事前構成済スキームに基づくです。

へ進みます。


作成する認証スキームの名前LINE Accountとします。スキーム・タイプとしてソーシャル・サインインを選択します。

設定資格証明ストアとして、先ほど作成した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のログイン画面が表示されます。


ログインをクリックすると、初回ログイン時はプロフィール情報およびユーザー識別子のアプリへの使用を許可するかどうか、確認を求められます。


許可するをクリックすると、APEXアプリケーションが開きます。


以上でLINEアカウントによるAPEXアプリケーションの認証ができました。

認証スキームユーザー名に設定した値#sub# (#APEX_AUTH_NAME#)が置換文字列APP_USERの値になります。APP_USERの値は一意であることが求められるため、属性subAPEX_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のアプリケーション作成の参考になれば幸いです。