2022年6月15日水曜日

OktaのグループをAPEXに認識させる方法とシングル・サインアウトの設定

 Oktaを使ったSAMLのシングル・サインオンの設定ができたので、さらに追加の構成を確認してみました。


OktaのグループをAPEXのダイナミック・グループとする


Okta側でユーザーが所属しているグループを、APEXアプリケーションのサインイン時にダイナミック・グループとして登録します。結果として、Okta側での所属グループでAPEXアプケーションの認可を制御することができます。

Oktaの設定画面を開き、DirectoryGroupsよりグループを作成します。Everyoneは最初から作成されているので、今回はAdministratorというグループを追加で作成しています。

Add Groupをクリックし、グループAdministratorを作成します。その後、作成されたグループAdministratorを開きます。


Assign Peopleをクリックし、People(つまりサインインするユーザー)をグループに含めます。

グループに含めるユーザーをNot Membersから+をクリックして、Membersへ移動します。


ユーザーをグループに含めたら、Saveをクリックします。


サインインの際に、Okta(IdP)からSP(APEX)に送信されるレスポンスに、グループの情報を含めます。ApplicationSAML Settingsに含まれるGROUP ATTRIBUTE STATEMENTSに設定を追加します。

Applicationsを開いて、作成済みのSP(前回の記事ではapexとして作成)を開きます。GeneralタブのSAML SettingsEditをクリックします。


General Settingsは変更せず、Nextをクリックします。

次に開く画面のGroup Attribute Statements (optional)にて、NamegroupsName formatBasicFilter正規表現と一致を選択して.*を指定します。

設定を行った後にPreview the SAML Assertionsをクリックし、設定した結果を確認します。


Assertionの内容が表示されます。NameIDとして表示されているユーザーが所属しているグループが、Attributeとして含まれていることを確認します。


Okta側で必要な変更は以上になります。Nextをクリックしてこの画面の変更を確定し、最後にSaveを実行して変更を保存します。

続いて、Oktaが送信してくるレスポンスからグループを取り出し、ダイナミック・グループを設定する処理をAPEX側に設定します。

ダイナミック・グループを設定するコードは以下になります。


APEXアプリケーションのSAMLサインインの認証スキームを開き、ソースPL/SQLコードに上記のコードを記載します。

ログイン・プロセス認証後のプロシージャ名に、ソースに記述したプロシージャassign_dynamic_groupsを設定します。


アプリケーション定義セキュリティを開き、認可ロールまたはグループ・スキームのソースカスタム・コードに変更します。


以上で、APEXアプリケーション側の設定も完了です。

ダイナミック・グループが正しく設定されているか確認するために、SAML認証の確認のために作成したアプリケーションsamltestに、対話モード・レポートのリージョンを作成します。

識別タイトルダイナミック・グループとします。ソース表名にAPEXの標準ビューAPEX_WORKSPACE_SESSION_GROUPSを指定します。


対話モード・レポートを追加したので、アプリケーションを実行します。Oktaでサインインしたのち、アプリケーションのホーム・ページが表示されます。

Group NameとしてAdministratorおよびEveryoneがリストされていれば、正しく設定できています。



シングル・サインアウトを設定する



アプリケーションからサインアウトを実行します。


Oktaではサインアウトがエラーになり、以下の画面が表示されます。


このエラーを回避するために、Okta側でシングル・サインアウトの設定を行います。

アプリケーションのSAML Settingsを編集します。Advanced Settingsを開き、Enable Single LogoutAllow application to initiate Single Logoutチェックを入れます。Single Logout URLSP Issuer共に、APEX側のSAMLコールバックURLを設定します。apex_authentication.saml_callbackで終わるURLで、このアプリケーションのSingle sign on URLおよびAudience URI(SP Entity ID)として設定しているURLと同一のURLです。

Signature Certificateとして、APEX側の内部およびワークスペース・アプリケーション用のSAML: APEX属性証明書として設定した証明書を設定します。以前の記事通りの手順であれば、cert-test.pemとして生成した証明書になります。


以上でOkta側のシングル・サインアウトの設定は完了です。Nextをクリックして作業を進め、最終的にSaveを実行して変更した設定を保存します。

Okta側で生成されたSingle Logout URLを確認します。アプリケーションのSign Onタブを開いて、SAML SetupView SAML setup instructionsを開きます。


②のIdentity Provider Single Logout URLをコピーし、APEX側に設定します。


APEXの認証制御SAMLの設定画面を開き、一番下にあるサインアウトURLに上記のURLを設定します。


以上でシングル・サインアウトの設定は完了です。

APEXアプリケーションからサインアウトを実行すると、Oktaのログイン画面に戻ります。


Oracle APEXのSAML認証でOktaをIdPに使用するにあたって、利用可能な追加設定の説明は以上になります。

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