目次
はじめに
当社はローコード開発が一般的に注目される前(2016年)から、超高速開発のソリューションとしてローコード開発基盤「OutSystems」の導入支援およびアプリケーション開発に力を入れてきました。
OutSystemsはアプリケーションを構築する際、ソースコードを自動生成することができ、開発生産性を向上できる製品です。
詳細は、tdiのサービスページ<超高速開発基盤「OutSystems」>でご紹介していますので、こちらをご覧ください。
今回は、OutSystemsの標準機能に加えて、OutSystemsで用意されている拡張機能であるForgeも利用し、シングルサインオンの機能を実装したアプリケーションを構築してみます。
シングルサインオン(SSO)とは
シングルサインオン(SSO)とは、一組のID・パスワードによる認証により、複数のWebサービス、クラウドサービス、アプリケーションにログインする仕組みです。
行動の一つをとっても何かしらのサービスを利用することの多い現代社会において、利便性が向上するのはもちろんのこと、パスワード漏えいのリスク低減や、管理者の負担軽減など、導入することで様々なメリットを享受できます。
当記事では、シングルサインオン提供サービスの一つであるMicrosoft Azure Active Directory(以下AzureAD)を利用して、OutSystemsアプリケーションにシングルサインオンを実装する方法を紹介していきます。
Azure ADでシングルサインオンを実装する
手順0.事前準備
実装に入る前に以下の準備をしていきます。
・Azure Active DirectoryのWebサイトからAzureの無料アカウントを発行する。(こちらから)
・アプリケーションで利用するAzureADユーザを作成する。(こちらを参考)
・シングルサインオンを実装する仮のアプリケーションをTraditionalWebアプリケーションで作成する。
(OutSystems標準のログインフローを使っていればOK)
手順1.Idpをアプリケーションに連携する
SAML 2.0プロトコルを使用したシングルサインオンを実装するために、Forge「Idp」が必要です。
Forgeサイトからダウンロードします。(こちらから)
次に、「Idp」が持つログイン処理用のサーバーアクションを使って、アプリケーションのログインフローを書き換えていきます。
・CommonフローのNoPermission画面-Preparationを書き換える
OutSystemsのアプリケーションでは、認証が必要なリソースに未認証のユーザーがアクセスした場合、例外処理が行われます。
例外処理では、NoPermission画面に遷移し、画面のPreparation内で未認証のユーザーと判断され、ログイン画面に遷移するフローになっています。
SAMLを利用したシングルサインオンを実装する場合、上記のフローで標準のログイン画面ではなくIDプロバイダにリダイレクトさせたいので、以下の画像のようにForge「Idp」部品内のServerActionである「Idp_SSO_URL」を用いて処理を書き換えていきます。
「Idp_SSO_URL」の出力でCommon\ExternalURLを呼び出します。
・LoginInfoWebブロックのLogOutアクションを書き換える
標準仕様では、ログアウトした際は上記のアクションからOutSystemsのログインユーザーアカウントのログアウトを行うフローになっています。
SAMLを利用したシングルサインオンを実装する場合、上記のフローでOutSystemsのログインユーザーアカウントだけでなく、AzureAD側のアカウントからもログアウトを実行させたいので、
以下の画像のようにForge「Idp」部品内のServerActionである「IdP_SingleLogout_URL」を用いて処理を書き換えていきます。
「IdP_SingleLogout_URL」の出力でCommon\ExternalURLを呼び出します。
手順2.AzureAD側の設定を行う
AzureADポータルから、プロバイダ側の設定をしていきます。
1.OutSystems Azure AD アプリケーションをギャラリーに追加する。
画面左側メニューより[エンタープライズ アプリケーション]に移動
↓
表上部の[新しいアプリケーション]をクリック
↓
OutSystems Azure ADで検索する。アプリケーションを見つけたら選択し、[作成]をクリック。
2.SAMLによるシングルサインオンの設定をします。
OutSystems Azure ADアプリケーションダッシュボードの画面左側メニューから[シングルサインオン]に移動
↓
[SAML]をクリック
↓
設定項目「①基本的な SAML 構成」 の編集画面に移動する
以下の項目を設定する。
・識別子 (エンティティ ID)
https://[環境情報]/IdP
・応答 URL (Assertion Consumer Service URL)
https://[環境情報]/IdP/SSO.aspx
↓
設定項目「③SAML 署名証明書」 より [フェデレーションメタデータXML] 横の [ダウンロード] をクリック。
ファイルをダウンロードする。
3.AzureADユーザーをOutSystemsAzureADアプリケーションに追加します。
AzureADの登録ユーザーをOutSystemsAzureADアプリケーションで利用できるように追加していきます。
OutSystems Azure AD画面 左側メニューより[ユーザーとグループ]に移動
↓
画面上部[ユーザーまたはグループを追加]をクリック
↓
ユーザー:[選択されていません]よりサブメニューを開く
↓
アプリケーションで利用するユーザーを選び、[選択]をクリック
↓
画面下部[割り当て]をクリック
※ユーザーのプロビジョニング設定を変更する
上記の処理では、AzureADで認証が許可された後、OutSystems側でMicrosoftユーザーに対応するユーザーを自動生成するようになっています。
その際、初期設定ではUser エンティティ – External_Id アトリビュート にAzureADのプリンシパル名が対応して作成されます。
このExternal_Idアトリビュートには36字以内のtext型データを指定する必要がありますが、Azureの標準のプリンシパル名がこの文字数を超えることがあります。
その場合、SQL書き込みエラーが発生し、正しくシングルサインオンの処理を終えることが出来ません。
AzureADポータルからプリンシパル名を変更する、またはExternal_Idに対応するAzureAD側属性を変更する、等の回避策を実施する必要があります。
手順3.Idpの接続情報を設定する
手順2でAzureADの準備が完了したので、その情報をForge「Idp」側に設定していきます。
1.Usersアプリケーションより、自身のユーザーに「IdP_Administrator」ロールを付与する。
2.Forge「Idp」のWeb画面から、手順2で作成したプロバイダ情報を設定します。
Web画面は、ServiceStudioでForge「Idp」アプリケーションを開き、「Open in Browser」よりアクセスできます。
[Add SAML App]をクリック
↓
以下の項目を設定し、[Save]をクリック。
Provider – [AzureAD/ADFS]
AppName- 任意(Idpの一覧表示でのみ利用されます)
↓
一覧画面から作成されたアイコンをクリック
↓
タブを[Idp Server and Settings]に切り替える。
[Import from Idp/federation metadata xml]をクリック。
↓
手順2でダウンロードしたメタデータファイルをアップロードする。
完成したアプリケーションを確認してみる
以上でシングルサインオンの実装が完了しました。実装先のOutSystemsアプリケーションをブラウザで開いてみます。
アプリケーションが起動したタイミングでAzureADの認証画面に遷移するはずです。
認証後、対象のアプリケーション画面にリダイレクトすれば成功です。
同様に、ログアウトした際の挙動も確認してみましょう。
最後に
今回はAzureADを利用したシングルサインオンで実装してみました。
今回利用したForge「Idp」はOkta, One Loginなど、他のシングルサインオンサービスにも対応しており、幅広い実装が可能です。
Fprgeを利用することで、OutSystems標準機能の範囲だけでなく、他サービスと連携した機能の実装も幅広くカバーできます。
今後も、OutSystemsの便利機能や拡張機能、Forgeを用いたアプリケーション実装などのご紹介を通して、OutSystemsの魅力をご紹介してまいります。
tdiは、OutSystems認定資格保有者数において国内トップクラスを誇り、知識に裏付けられた導入サポートを行っています。こちらよりお気軽にお問合せください。
執筆者プロフィール
-
大手メーカーにおける販売システムの保守業務、Microsoft Dynamics AXの開発を経て、現在はOutSystemsのプリセールスを担当している。
体を動かすことが好きで、会社のテニス部、ランニング部に所属している。