Skip to main content

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

Active DirectoryのグループとOutSystemsのロールのマッピング

グループ、ユーザー、ユーザー権限、アクセス許可を定義する際、多くの組織がActive Directory(AD)を使用しています。OutSystemsでは、同様のグループ、ユーザー、ロールのモデルがサポートされています。しかし、これはユーザー権限、アクセス許可、ロールを更新する際に両方(Active DirectoryとOutSystems)で変更を行う必要があるということを意味します。

このドキュメントでは、「Active Directory」と「Active Directory Group Mapping」の2つのOutSystems Forgeコンポーネントを利用して、Active DirectoryのグループをOutSystemsのロールにマッピングする方法について説明します。この方法により、ユーザー権限とアクセス許可のモデルをActive Directoryのグループで一元的に管理し、それらをOutSystemsロールにマッピングすることができます。設定の最後に、Active DirectoryとOutSystemsの同期のタイミングと方法を定義します。

このマッピングは、Active Directoryを使用してOutSystemsアプリケーションのエンドユーザーを認証している場合に特に便利ですが、必須ではありません。Active DirectoryのグループとOutSystemsのロールのマッピングは、内部認証やLDAPを使用している場合でも可能です。詳細については、「エンドユーザー認証」をご覧ください。

はじめに

マッピングの手順自体を開始する前に、Active DirectoryとOutSystemsのロールのコンセプトについていくつか知っておく必要があります。

  • 以下のセクションでは、手順を実行するときに必要な基本的なActive Directoryのコンセプトについて説明します。

  • OutSystemsのロールの詳細については、OutSystemsオンラインヘルプの「ユーザーロール」をご覧ください。

Active Directoryのグループ

Active Directoryではグループを使用して、ユーザーアカウント、コンピュータアカウント、その他のグループを管理可能な単位にまとめます。個別のユーザーではなくグループで処理することにより、ネットワークの保守や管理が簡素化されます。

Active Directoryには、以下の2種類のグループがあります。

  • 配布グループ – メールの配布リストを作成するときに使用します。このグループはセキュリティが有効になっていないため、随意アクセス制御リスト(DACL)に追加することができません。

  • セキュリティグループ – 共有リソースへのアクセス許可を割り当てるときに使用します。セキュリティグループを使用すると、ネットワーク上のリソースへのアクセスを効率的に割り当てることができます。Active Directoryでセキュリティグループにユーザー権限を割り当てたり、セキュリティグループにリソースのアクセス許可を割り当てたりすることができます。

Active Directoryのグループ、ユーザー権限、アクセス許可の詳細については、Microsoftの公式ドキュメントをご覧ください。

以下のセクションで使用するOutSystems Forgeの「Active Directory Group Mapping」では、Active Directoryの2種類のグループ(配布グループとセキュリティグループを)をOutSystemsのロールにマッピングできます。

Active DirectoryのグループとOutSystemsのロールのマッピング

以下の手順は、Active DirectoryのグループをOutSystemsのロールにマッピングする手順をまとめたものです。

  1. 必要なForgeコンポーネントをダウンロードしてインストールする

  2. Active Directoryの情報にアクセスするためのアクセストークンを作成する

  3. Active Directory Group MappingアプリケーションでActive DirectoryのグループとOutSystemsのロールのマッピングを定義する

  4. OutSystemsアプリケーションでログインプロセスを調整する

注記: このマッピングでは、Active DirectoryのグループをOutSystemsのロールに直接マッピングする特定のユースケースを実装します。実際のユースケースの要件が異なる場合は、それに応じて以下のセクションの手順をカスタマイズすることができます。

1. 必要なForgeコンポーネントをダウンロードしてインストールする

Forgeで入手可能な以下のコンポーネントをインストールする必要があります。

Active Directoryコンポーネントをインストールするには、以下の手順を実行します。

  1. Service Studioを開き、Forgeコンポーネントをインストールする開発環境に接続します。

  2. アプリケーションのリスト画面で[Install Application]をクリックします。Service Studioのタブが開き、Forge Webサイトが表示されます。

  3. 「active directory」で検索し、Active Directoryコンポーネントをクリックします。

画像のaltテキスト

  1. Install…]をクリックし、コンポーネントをインストールする準備ができたら、[Install]をクリックします。

Active Directory Group Mappingコンポーネントをインストールするには、前の手順を実行しますが、Forgeのページで代わりに「active directory group mapping」を検索します。

2. Active Directoryの情報にアクセスするためのアクセストークンを作成する

  1. Service Studioでアプリケーションのリスト画面に移動し、「Active Directory Group Mapping」アプリケーションをクリックします。

  2. Open in Browser]をクリックします。

画像のaltテキスト

  1. Webアプリケーションを初めて開くと、Active Directoryのアクセストークンを作成するよう求める警告が表示されます。マッピングを作成する前にこのアクセストークンを作成する必要があります。 トークンの作成に関するフィールドを入力します。トークンレコードの名前、ドメイン、そのドメインのActive Directoryへのアクセス権を持つユーザーの資格情報(ユーザー名とパスワード)を指定します。

画像のaltテキスト

(オプション) [Container]フィールドにベースActive Directoryノードの識別名を入力すると、Active Directoryで実行される検索のベースコンテキストを定義できます。これにより、すべての検索が指定されたベースノードで始まるサブツリーに絞り込まれます(値の例:CN=Users,DC=dcserver,DC=mycompany,DC=com)。このフィールドはオプションです。入力しなかった場合、Active Directoryの検索操作の詳細度が下がりますが、他のフィールドが正しいときは問題なく動作します。

  1. Save]ボタンを選択します。

3. Active DirectoryのグループとOutSystemsのロールのマッピングを定義する

この手順では、Active Directory Group Mappingアプリケーションを使用してActive DirectoryのグループとOutSystemsのロールのマッピングを定義します。Active Directoryの情報がOutSystemsに同期される際は、これらのマッピングに含まれるActive Directoryグループのみが対象となります。

  1. 「Active Directory Group Mapping」アプリケーションの[Role Mapping]画面に移動します(これには数秒かかる場合があります)。

  2. Create New Mapping]をクリックします。

  3. マッピングを作成するActive DirectoryのグループとOutSystemsのロールを選択して、[Save]をクリックします。

画像のaltテキスト

  1. 作成するActive DirectoryのグループとOutSystemsのロールのすべてのマッピングについて、このプロセスを繰り返します。

マッピングをすべて作成したら、Service Centerで同期プロセスをオンデマンドで開始するか、SyncRolesタイマーのスケジュールを構成して次回の実行を待つことができます。

4. OutSystemsアプリケーションでログインプロセスを変更する

ユーザーセッションを開始する前にロールを更新できるようにするには、「Login」画面アクション(アプリの「Common」UIフローの[Login]画面にあります)を変更し、ユーザーセッションを作成する前にActiveDirectoryRolesCoreモジュールの「Login\RefreshUserRoles」アクションの呼び出しを含める必要があります。

Active Directory Group Mappingを使用してActive DirectoryのグループとOutSystemsのロールをマッピングすると、OutSystemsアプリケーションのログインフローでは以下のタスクが実行されます。

  1. 外部認証プロバイダのユーザー資格情報を検証します。

  2. OutSystemsデータベースのローカルのUsersエンティティにユーザーが存在しない場合は、ユーザーを作成します。 注記: Active Directory Group Mappingコンポーネントは、(ADユーザーの)UsersエンティティのUsernameアトリビュートがドメイン、「\」(バックスラッシュ)文字、Active Directoryユーザーオブジェクトの「sAMAccountName」アトリビュートで<ドメイン> + "\" + <ADユーザーのsAMAccountName>のようになっていることを想定しています。

  3. (オプション) OutSystemsデータベースのユーザーのアトリビュートを、外部認証プロバイダのデータで更新します(名前、メール、モバイル端末、「Is_Active」フラグ)。

  4. (新しい手順) Active Directory Group Mappingアプリケーションで定義したマッピングに基づき、認証済みのユーザーのOutSystemsのロールを更新します(「Login\RefreshUserRoles」アクションを使用します)。

  5. ユーザーをOutSystemsアプリケーションにログインさせ(サイレントログイン)、更新されたロールでユーザーセッションを作成します。

デフォルトでは、OutSystemsアプリケーションが「Login」画面アクションで呼び出すのは(Usersモジュールの)「User_Login」アクションのみです。このアクションでは、上記の手順の一部が実行されます。しかし、「Login」画面アクションをすでに必要に応じて変更している場合があります。

アプリケーションの現在のログインフローに基づき、シナリオに応じた手順を実行します。

シナリオA)「User_Login」サーバーアクションをまだ使用している場合。

上記の手順を実現するには、この呼び出しを独自のカスタムロジックに置き換える必要があります。

この場合、「User_Login」アクションを使用しないようにする必要があります。上記の手順の多くがUser_Loginアクション内で実行されるため、ロールを更新するロジックを必要な場所に追加できないからです。

シナリオB)Login画面アクションをすでに変更しており、User_Loginサーバーアクションをまったく使用していない場合。

この場合、現在のログインロジックにActiveDirectoryRolesCoreモジュールの「Login\RefreshUserRoles」アクションを含め、上記に基づき、フローの適切なタイミング(ユーザー資格情報の検証からOutSystemsでユーザーセッションが作成されるまでの間)になるようにします。

いずれの場合も、[Manage Dependencies]ダイアログを使用してActiveDirectoryRolesCoreモジュールのRefreshUserRolesアクションへの参照を追加する必要があります。

修正後のログインフローの例を以下に示します。

画像のaltテキスト

修正済みの「ログイン」フローの例については、「Active Directory Group Mapping」アプリケーションのADAuthenticationSampleモジュールをご覧ください。

このサンプルの実装では、各ノードで以下が実行されます。

  • ValidateCredentials:ActiveDirectoryCoreモジュールの「ADUsers\AD_UserValidateLogin」アクションを使用してActive Directoryのユーザーを認証します。

  • UserProvisioning:ローカルのOutSystemsデータベースにユーザーが存在しない場合は、ユーザーを作成します。ActiveDirectoryRolesCoreモジュールの「SyncADUser」アクションを使用して、ユーザーのアトリビュートをActive Directoryのデータと同期します。

  • RefreshUserRoles:Active DirectoryのグループとOutSystemsのロールのマッピングに基づいて、ユーザーに割り当てられたロールを更新します。ActiveDirectoryRolesCoreモジュールの「Login\RefreshUserRoles」アクションを呼び出します。

  • System_Login:OutSystemsアプリケーションでユーザーのログインを実行し、ユーザーセッションを作成します。(System)モジュールの「Login」アクションを呼び出します。

ActiveDirectoryRolesCoreモジュールのRefreshUserRolesアクションの概要

ActiveDirectoryRolesCoreモジュールの「Login\RefreshUserRoles」アクションは、ログインするユーザーのアクセス許可(Active Directoryのグループ)を確認し、Active Directoryのグループのマッピングに基づいてOutSystemsのロールの付与/取り消しを行います。

Username入力パラメータの値は、Active Directoryユーザーの「sAMAccountName」アトリビュートの値になります。LDAPを使用してログインする場合は、すでにこのアトリビュートを使用してアカウントにアクセスしており、Loginアクションの呼び出しのときにそれをUsernameの値として使用できます。

Active DirectoryとOutSystemsの同期

Active DirectoryのグループとOutSystemsユーザーに割り当てられたロールの同期は、いくつかのタイミングで行われます。

  • ユーザーが正常にログインしたとき。Active Directoryの資格情報を検証した後、ログインするユーザーに関連付けられたロールが、関連付けられたActive Directoryグループと「Active Directory Roles Mapping」アプリケーションで定義されたマッピングに基づいて更新されます。

  • 指定されたいずれかの同期タイマーが実行されたとき。「Active Directory Roles Mapping」アプリケーションには、Active Directoryのデータを定期的に同期するための複数のタイマーがあります。詳細については、次のセクションをご覧ください。

利用可能なタイマー

「Active Directory Roles Mapping」アプリケーションの「ActiveDirectoryRolesCore」モジュールには、同期のニーズに応じて構成する必要がある3つのタイマーがあります。

  • SyncRoles— 有効なマッピング内に存在するActive Directoryのグループの各ユーザーに割り当てられたロールを更新します。 「Active Directory Roles Mapping」アプリケーションでマッピングを無効にすると、このタイマーの次の実行時に、(マッピングレコード内の)ADグループに関連付けられたOutSystemsのロールがそのADグループに属するユーザーから削除されます。

  • SyncGroups— SyncRolesタイマーと似ていますが、Active DirectoryのグループとOutSystemsのグループの間で定義されているマッピングに基づいてユーザーロールを同期する場合に使用します。詳細については、後述の「Active DirectoryのグループとOutSystemsのグループの同期」のセクションをご覧ください。

  • SyncUsers— このタイマーは「SyncADUser」という名前のプレースホルダアクションを各OutSystemsユーザーに対して実行します。このアクションのロジックはユースケースごとに大きく異なるため、ユーザーデータの同期を設定する際は、自分でロジックを実装する必要があります。 たとえば、このアクションを使用して、ユーザーをActive Directoryのステータスに基づいて有効/無効にすることができます。

SyncRoles/SyncGroupsタイマーのスケジュールの定義

Active Directoryの更新頻度に基づき、SyncRolesタイマーまたはSyncGroupsタイマーのスケジュールを(使用するマッピングのタイプに応じて)構成する必要があります。デフォルトでは、これらのタイマーにスケジュールは定義されていません。Active Directoryグループが頻繁に変更される場合は、OutSystemsのロール/グループタイマーを頻繁に実行する必要があります。

20/30分ごとにタイマーが実行されるように設定することを推奨します。

Service Centerでタイマーのスケジュールを設定するには、以下の手順を実行します。

  1. Service Center(http://<環境のアドレス>/ServiceCenter)で、[Factory > Applications]に移動してアプリケーションリストの[Active Directory Roles Mapping]をクリックします。

  2. [Modules]タブで、[ActiveDirectoryRolesCore]をクリックして[Timers]タブを選択します。

  3. 構成するタイマーの名前のリンク(「SyncRoles」または「SyncGroups」)をクリックし、タイマーのスケジュールを定義または編集します。

画像のaltテキスト

  1. [Time]フィールドでタイマーのスケジュールを定義します。タイマーを実行する特定の時刻をスペース区切りで入力することができます(たとえば、「00:00 07:00」と入力すると、毎日午前12時と午前7時にタイマーが実行されます)。または、[Generate time with intervals of]フィールドで間隔を設定して[Generate]をクリックし、その間隔に基づいて1日の特定の時刻をすべて生成することができます。

画像のaltテキスト

注記: 同期操作中に更新されたユーザーのロールは、そのユーザーに有効なセッションがある間は適用されません。詳細については、後述の「セッションタイムアウトと永続的ログイン」のセクションをご覧ください。

ユーザーに関する情報の同期(SyncUsers)

SyncUsersは「SyncADUser」という名前のプレースホルダアクションを実行します。これを使用して、既存の各OutSystemsユーザーを、Active Directory内の対応するユーザーの変更に応じて更新できます。このアクションのロジックはユースケースごとに大きく異なるため、ユーザーデータの同期を設定する際は、自分でロジックを実装する必要があります。

たとえば、このアクションを使用して、ユーザーをActive Directoryのステータスに基づいて有効/無効にすることができます。なお、Active Directoryでユーザーが無効になり、何らかのユーザー有効化/無効化同期プロセスが実行されると、セッションがタイムアウトした場合に同じユーザーはログインできなくなります。

このタイマーは、1日1回(夜間に)実行することを推奨します。デフォルトでは、毎日午前0時に実行するようにスケジュール設定されています。

Active Directoryデータのオンデマンドでの同期

指定されたタイマーのスケジュールを設定するほかに、Service Centerを使用してオンデマンドで実行することもできます。これにより、タイマーのスケジュール以外の時間にActive DirectoryのグループとOutSystemsのロール/グループのデータを同期することができます。詳細については、「Service Centerでタイマーを実行する」をご覧ください。

注記: Service Centerを使用してオンデマンドで同期を実行した場合、新しいロールがすぐに有効になるとは限りません。詳細については、「セッションタイムアウトと永続的ログイン」のセクションをご覧ください。

Active DirectoryのグループとOutSystemsのグループの同期

Active Directory Group Mappingアプリケーションでは、Active DirectoryのグループとOutSystemsのロールのマッピングに加えて、Active DirectoryのグループとOutSystemsのグループのマッピングも行うことができます。このマッピングの定義は、アプリケーションの[Group Mapping]画面で行います。

ただし、両方のタイプのマッピング(OutSystemsのロールとのマッピングおよびOutSystemsのグループとのマッピング)を構成することは推奨しません。データの不整合が発生する可能性があります。

セッションタイムアウトと永続的ログイン

OutSystems環境のセッションタイムアウトの定義は、慎重に検討する必要があります。

Active Directoryのグループの情報から同期された新しいロールは、ユーザーがOutSystemsアプリケーションからログアウトして新しいセッションを開始するか、ユーザーの現在のセッションがタイムアウトになるまで有効になりません。セッションタイムアウトは、machine.configファイルで定義するか、Factory Configurationを使用して定義することができます。

また、この設定を構成したら、永続的ログインを無効にしてください。永続的ログインを使用している場合、ユーザーがログアウトするか、非アクティブになってから10日後にならないと、ユーザーセッションが終了しません。この動作も新しいロールが適切なタイミングで適用されない原因になります。

既知の制限

現在、Active Directory Group Mappingコンポーネントを使用するには、Active Directoryのアクセストークンで構成されたドメインに属するOutSystemsフロントエンドサーバーが必要です。

  • Was this article helpful?