4D Serverでは、Windows上のクライアント/サーバーソリューションにSSO(Single Sign On)機能を実装することができます。
SSOを4Dソリューションに実装することにより、ユーザーはカンパニーのWindowsドメインにログインしていた場合に、パスワードを再入力する事なくWindows上の4Dアプリケーションにアクセスできるようになります(Active Directoryを使用)。仕組みとしては、4D ServerアプリケーションはActive Directoryに認証を委任し、標準のメソッドを使用して4Dユーザーをデータベースにログインさせるための、Windowsのセッションログインを取得します。
注: より一般的な4Dのセキュリティ機能については、4D Security guide をご覧ください。
SSO機能を使用するためには以下の条件が必須となります:
- Windows用の4D Server アプリケーションであること(4DのシングルユーザーアプリケーションはSSOをサポートしていません)。
- ServerNet ネットワークレイヤーが有効化されていること。より詳細な情報については、新しい ServerNet ネットワークレイヤー(互換性) の段落を参照してください。
デフォルトでは、SSO機能は4D Serverでは有効化されていません。この機能を利用するためには、4D Serverのデータベース設定ダイアログボックスのCS/公開オプションページにあるドメインサーバーによるユーザー認証オプションをチェックする必要があります:

このオプションをチェックした場合、4Dは透過的にWindowsドメインサーバーのActive Directoryに接続し、利用可能な認証トークンを取得します。
こ のオプションはNTLMプロトコル経由の標準の認証を提供します。4DはNTLMとケルベロスプロトコルをサポートしています。使用されるプロトコルはカ レントの設定に応じて4Dによって自動的に選択されます([#title id="8582" anchor="2949178"/]を参照して下さい)。ケルベロスプロトコルを使用したい場合、追加のSPNフィールドに入力する必要があります(後述参照)。
ケルベロスを認証プロトコルとして使用したい場合、データベース設定ダイアログボックスのC/Sの公開オプションページ内のサービスプリンシパル名(SPN)オプションに入力をする必要があります:

このオプションはSPNをActive Directory設定内で設定されているものと同じに宣言します。サービスプリンシパル名とはサービスインスタンスの固有の識別子です。SPNは、ケルベロス認証によってサービスインスタンスとサービスログインアカウントを関連づけるのに使用されます。これによりクライアントがアカウント名を持っていなくても、サービスがアカウントを認証する事をリクエストできるようになります。詳細な情報については、MSDNウェブサイトのSPNのページを参照して下さい。
SPN識別子は以下のパターンに従う必要があります:
- SPNがコンピューター属性である場合には、 "ServiceName/FQDN_user"
- SPNがユーザー属性である場合には "ServiceName/FQDN_computer"
このとき上記の略称の意味は以下の通りです:
- ServiceName はクライアントが認証しようとしているサービスの名前です。
- Fully Qualified Domain Name (FQDN) は、コンピューターとユーザーの両者の対し、Active Directoryの3階層のうちどの位置にいるのかを指定するドメイン名です。
4Dデータベースは、SPNは以下のようにして設定することができます:
- 4D Serverでの使用に対しては、データベースストラクチャー設定内で設定できます。
- 配布のための使用については、ユーザー設定(データベースのPreferencesフォルダ内に保存されているsettings.4DSettingsファイル)で設定できます。
SSO機能が有効化されていると(上記参照)、4D Serverでのユーザーセッションを開くのにWindowsセッション証明書に基づいたユーザー認証を利用できるようになります。
SSO機能はあくまで認証されたログインのみを提供し、そのログインは自力で4Dの標準ログインメソッドに渡す必要があるという点に注意して下さい。4Dリモートアプリケーションがサーバーに接続しようとするとき、Active Directoryで定義されたユーザーログインを返すCurrent client authentication4Dコマンドを使用する必要があります。それからこのログインを(ビルトインのユーザーとグループ、LDAPコマンド、あるいは他のカスタムの機構などを使用して)認証システムに渡すことで、お使いの4Dアプリケーションのリモートユーザーへの適切なセッションを開く事ができます。
この原理は以下のような図にまとめる事ができます:

Current client authenticationコマンドはOn Server Open Connection Database Method内で呼び出される必要があります。これはリモートの4Dが4D Serverデータベースへの新しい接続を開くときに毎回呼び出されるものです。認証が失敗した場合、$0に非ヌル値を渡し接続を拒否する事ができます。
新しい Current client authentication コマンドを呼び出すためには、以下のシンタックスを使用して下さい:
login:=Current client authentication(domain;protocol)
ここでの略称の意味は以下の通りです:
- login はActive Directoryにログインするためにクライアントで使用されるID(テキスト値)です。この値はデータベース内でユーザーを認識するために使用する必要があります。
ユーザーが正常に認証されていない場合、空の文字列が返され、エラーは返されません。 - domain とprotocol は任意のテキスト引数です。これらはコマンドによって入力され、これらの値によって接続を受け入れまたは拒否することができます:
- domain はActive Directoryのドメイン名です。
- protocol はユーザーを認証するのにWindowsが使用するプロトコル名です。
このコマンドについてのより詳細な情報については、 Current client authentication コマンドの詳細を参照して下さい
4D Serverはカレントのアーキテクチャーや設定によって、様々なSSO設定を管理します。認証に使用するプロトコル(NTLM または Kerberos)に加えてCommonCommentコマンドによって返される情報は、要件(以下参照)が満たされていた場合には、実際の設定によって変化します。認証に実際に使用されるプロトコルはCommonCommentコマンドのprotocol引数に返されます。
以下のテーブルはNTLM あるいはケルベロス認証を使用する際の必須要件をまとめたものです:
| NTLM | ケルベロス |
4D Server と 4D リモートが異なるマシン上にあること | yes | yes |
4D Server ユーザーがドメイン上にあること | yes | yes |
4D リモートが4D Serverユーザーと同じリモート上にあること | yes または no(*) | yes |
4D ServerでSPN入力されていること | no | yes(**) |
要件が満たされている場合にCommonCommentによって返される情報 | user=予想されるログイン、domain=予想されるドメイン、protocol="NTLM" | user=予想されるログイン、domain=予想されるドメイン、protocol="Kerberos" |
(*) 次の特定の設定のみサポートされます: 4Dリモートユーザーが4D Serverと同じADに属するマシン上のローカルアカウントであること。この場合、domain引数には4D Serverのマシン名が入力されます。サポートの可否は実際のユーザー設定に依存し、サポートされない場合は空文字列が返されます。
(**) ケルベロスの必須要件が全て満たされているのにCommonCommentコマンドがprotocol引数に"NTLM"を返す場合、以下の状況のどちらかである事を意味します:
- SPNシンタックスが無効です。つまり、Microsoftによって提示された制約に従っていない事を意味します。
- または、AD内に複製されたSPNが存在する事を意味します。この問題はAD管理者によって修正される必要があります。
注: シンタックスが有効であっても、SPN宣言自身が正しいことを意味する訳ではありません。具体的には、AD内にSPNが存在しない場合、CommonCommentコマンドは空の文字列を返します。