IPC チャネルでの認証

このトピックの対象は、既存のアプリケーションとの下位互換性のために残されているレガシ テクノロジに特定されています。新規の開発には、このトピックを適用しないでください。分散アプリケーションは、現在は Windows Communication Foundation (WCF) を使用して開発する必要があります。

IPC チャネルは、認証と偽装を直接サポートします。ここでは、クライアント チャネルとサーバー チャネルの構成方法について説明します。

.NET Framework を使用することにより、リモート オブジェクトのサーバーでは、関連する IpcServerChannel オブジェクトおよび IpcClientChannel オブジェクトのプロパティを設定して、呼び出し元の認証や偽装を行うことができます。HTTP チャネルおよび TCP チャネルとは異なり、IPC チャネルは既定で認証を実行します。IpcServerChannel が作成されると、チャネルにアクセス制御リスト (ACL: Access Control List) が作成されます。**既定では、ACL にはサーバー アプリケーションの実行に使用されている資格情報だけが含まれます。チャネルと通信するには、クライアント (および IpcClientChannel) は同じ資格情報を使用して実行する必要があります。ただし、IPC サーバー チャネル構成内に、Windows ユーザーまたはユーザー グループを指定できます。これにより、ユーザーやユーザー グループは、チャネルへアクセスできるようになります。

サーバーの構成

サーバー アプリケーションの実行に使用されている ID を持つユーザー以外のユーザーが IPC チャネルにアクセスできるようにする場合、authorizedGroup プロパティにユーザーまたはユーザー グループを指定できます。次の構成ファイルでは、Users グループのすべてのユーザーが IPC チャネルにアクセスできます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Server.MyRemoteObject, Server" objectUri="MyRemoteObject.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>

IPC チャネルは、偽装もサポートします。これは、サーバー上で impersonate プロパティによって制御されます。次の構成では、偽装が有効になります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Microsoft.Samples.Implementation.ImplementationClass, Server" objectUri="server.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" secure="true" impersonate="true" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(ja-jp,VS.100).gif注 :
IPC チャネルの認証を使用する場合、impersonate プロパティを true に設定する際に、さらに secure プロパティを true に設定する必要があります。

ms172351.note(ja-jp,VS.100).gif注 :
すべてのプロセスが Windows Vista の標準のユーザー アカウントを使用して実行されます。標準のユーザーは管理者アカウントを偽装できません。管理者アカウントを偽装する必要があるリモート処理アプリケーションがある場合、そのアプリケーションは管理者特権で実行する必要があります。

認証されたクライアントの ID は、CurrentPrincipal を取得して、Identity プロパティにアクセスすることによってアクセスできます。偽装されたクライアントの ID は GetCurrent によってアクセスできます。その後、必要に応じて、独自の承認を実行できます。

IPC チャネルは常に NTLM 認証を使用します。IPC は単一コンピューター内の呼び出しに限定されるため、Kerberos はサポートされていません。

クライアントの構成

クライアント IPC チャネルで偽装を使用するように構成にするには、次の構成ファイルに示すように、tokenImpersonationLevel プロパティを impersonation に設定します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="ipc" secure="true" tokenImpersonationLevel="impersonation" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(ja-jp,VS.100).gif注 :
IPC チャネルの認証を使用する場合、tokenImpersonationLevel プロパティを "impersonation" に設定する際に、さらに secure プロパティを true に設定する必要があります。偽装を実行するためには、サーバー チャネルの impersonate プロパティを true に設定する必要があります。サーバー上ではこのプロパティは impersonate という名前ですが、クライアント上では tokenImpersonationLevelimpersonation に設定するので注意が必要です。

ms172351.note(ja-jp,VS.100).gif注 :
すべてのプロセスが Windows Vista の標準のユーザー アカウントを使用して実行されます。標準のユーザーは管理者アカウントを偽装できません。管理者アカウントを偽装する必要があるリモート処理アプリケーションがある場合、そのアプリケーションは管理者特権で実行する必要があります。

tokenImpersonationLevel は、次の表のいずれかの値に設定できます。

tokenImpersonationLevel の設定 説明

identification

サーバーは、セキュリティ ID や特権などのクライアント情報を取得できますが、クライアントを偽装できません。

impersonation

サーバーは、ローカル システム上にあるクライアントのセキュリティ コンテキストを偽装できます。サーバーは、リモート システムにあるクライアントを偽装できません。

delegation

サーバーは、リモート システムにあるクライアントを偽装できます。

ms172351.note(ja-jp,VS.100).gif注 :
IPC チャネルでは、プログラムまたは構成を使用して、別の資格情報のセットを指定することはできません。したがって、クライアントは実行に使用している資格情報を常にサーバーに送信します。

ms172351.note(ja-jp,VS.100).gif注 :
IPC チャネルは認証に NTLM のみを使用します。

参照

概念

HTTP チャネルでの認証
TCP チャネルでの認証
暗号化およびメッセージの整合性