TCP チャネルでの認証
多くの場合、リモート プロシージャに呼び出し元を識別させ、その ID に関連付けられたアクセス許可でリモート プロシージャを実行すると便利です。悪意のある呼び出し元がリモート プロシージャを悪用し、本来であれば承認されないアクションを実行することを防止するのに役立つので、この方法をお勧めします。
.NET Framework では、関連付けられた TcpServerChannel および TcpClientChannel オブジェクトの構成プロパティを設定すると、リモート オブジェクトのサーバーが呼び出し元を識別および偽装することができます。
サーバーの構成
リモート呼び出し元を認証するようにサーバー TCP チャネルを構成するには、TcpServerChannel オブジェクトの authenticationMode 構成プロパティを使用します。これは、AuthenticationMode 列挙型の任意のメンバに設定できます。authenticationMode を IdentifyCallers に設定すると、チャネルは、すべての呼び出し元に検証可能なユーザー ID の提供を要求します。authenticationMode を ImpersonateCallers に設定すると、サーバー上のすべての操作は提供された ID で実行されます。プログラムで authenticationMode 構成プロパティを設定する方法の例については、「方法 : authenticationMode 構成プロパティを設定する」を参照してください。
認証済みのクライアントの ID は、CallContext クラスから __remotePrincipal データとして使用できます。
クライアントの構成
リモート サーバーへの呼び出し元を識別するようにクライアント TCP チャネルを構成するには、TcpClientChannel オブジェクトの impersonationLevel 構成プロパティを使用します。これは、ClientImpersonationLevel 列挙型の任意のメンバに設定できます。impersonationLevel を None に設定すると、リモート サーバーへのすべての呼び出しが匿名で行われます。impersonationLevel を Identify に設定すると、クライアントによってリモート サーバーの呼び出し元が識別されます。impersonationLevel を Impersonate に設定すると、クライアントは提供された ID の下でのリモート呼び出しの実行を許可します。impersonationLevel を Delegate に設定すると、サーバーがクライアントの ID を渡します。クライアントが許可しているよりも高度な impersonationLevel をリモート サーバーが要求する場合 (たとえば authenticationMode を IdentifyCallers に、impersonationLevel を None に設定するか、authenticationMode を ImpersonateCallers に、impersonationLevel を Identify に設定している場合)、例外がスローされます。
既定では、TCP クライアント チャネルは、クライアントの処理の実行に使用されるユーザー ID でそれ自体を認証します。useDefaultCredentials 構成プロパティを falseに設定し、代替 ID を指定するように domain、username、および password 構成プロパティを設定することによって、代替 ID を指定できます。
TCP クライアント チャネルを構成して、複雑なプログラム論理に基づいて認証するかどうかを決定できます。authenticationPolicy 構成プロパティを IAuthenticationPolicy インターフェイスを実装するオブジェクトに設定すると、そのオブジェクトの ValidateSecurityPackage メソッドが呼び出され、認証を続行するかどうかが決定されます。
構成ファイルで認証を実行するように TCP クライアント チャネルを設定する方法については、「方法 : 認証を実行するように TCP クライアント チャネルを設定する」を参照してください。
参照
処理手順
方法 : authenticationMode 構成プロパティを設定する
方法 : 認証を実行するように TCP クライアント チャネルを設定する
関連項目
AuthenticationMode
ClientImpersonationLevel