OutSystemsでAzureADを利用したシングルサインオンを実装する

Pocket

はじめに

当社はローコード開発が一般的に注目される前(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側属性を変更する、等の回避策を実施する必要があります。

(今回は仮にプリンシパル名の代わりに従業員IDをExternal_Idの対応属性に利用する設定とした)

 

手順3.Idpの接続情報を設定する

 
手順2でAzureADの準備が完了したので、その情報をForge「Idp」側に設定していきます。
 
 

1.Usersアプリケーションより、自身のユーザーに「IdP_Administrator」ロールを付与する。

 

(Idp画面に入るための専用ロールです)

 

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認定資格保有者数において国内トップクラスを誇り、知識に裏付けられた導入サポートを行っています。こちらよりお気軽にお問合せください

お問い合わせ先

執筆者プロフィール

Igarashi Takuya
Igarashi Takuyatdi OutSystems推進室
大手メーカーにおける販売システムの保守業務、Microsoft Dynamics AXの開発を経て、現在はOutSystemsのプリセールスを担当している。
体を動かすことが好きで、会社のテニス部、ランニング部に所属している。
Pocket

関連記事