使用 HTTP 信道进行身份验证
若要使用 HttpChannel 信道对远程调用进行身份验证,必须在 Internet 信息服务 (IIS) 下承载该远程对象。
服务器配置
服务器上的所有身份验证配置都是通过 IIS 完成的。服务器上不存在与 HttpChannel 身份验证相关的配置设置。有关 IIS 和配置身份验证的更多信息,请参见 IIS 身份验证(可能为英文网页)。
客户端配置
在调用承载于 IIS 下并配置为进行身份验证的远程对象时,客户端必须指定凭据。若要自动发送客户端应用程序当前使用的凭据,请将 useDefaultCredentials 属性设置为 true:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http" useDefaultCredentials="true"/>
</channels>
<client>
<wellknown
url="http://MyServer/IISSec/MyRemoteObj.rem"
type="Shared.MyRemoteObj, Shared"/>
</client>
</application>
</system.runtime.remoting>
</configuration>
如果要指定其他凭据集,则可以通过编程方式实现此目的,如下面的代码所示:
MyRemoteObj obj = new MyRemoteObj();
// Get the current set of channel sink properties
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
// Set domain, username, and password properties
props["domain"] = "SomeDomain";
props["username"] = "SomeUser";
props["password"] = "SomePassword123";
Console.WriteLine(obj.SayHello());
另外,您也可以通过编程方式设置 credentials 属性,并在此过程中指定实现 ICredentials 接口的类。首先,请创建实现 ICredentials 接口的类:
namespace MyCredentialsLib
{
public class MyCredentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
Console.WriteLine("MyCredentials.GetCredential() called");
NetworkCredential newCred = new NetworkCredential("SomeRemotingUser", "SomePassword");
return newCred;
}
}
}
接下来,必须在客户端中创建实现 ICredentials 的类的实例,然后将 credentials 属性设置为该实例,如下面的代码所示:
RemotingConfiguration.Configure("client.exe.config", false);
MyRemoteObj obj = new MyRemoteObj();
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
MyCredentials credentials = new MyCredentials();
props["credentials"] = credentials;
Console.WriteLine(obj.SayHello());
注意: |
---|
将凭据硬编码为应用程序始终不是一个好的做法。此处这样做只是为了便于说明。 |
useAuthenticatedConnectionSharing 属性指示服务器信道重用经过身份验证的连接,而不是对每次传入的调用都进行身份验证。将 useDefaultCredentials 设置为 true 时,此属性的默认值为 true。可以在配置文件中(在 <channel> 元素内)设置此属性,也可以用编程方式实现此目的(具体做法与设置 username 和 password 属性的方式完全相同,如前面的示例代码所示)。
unsafeAuthenticatedConnectionSharing 属性指示客户端提供其自己的凭据和连接组名,以供服务器在创建通过身份验证的连接组时使用。如果将此属性设置为 true,则必须将 connectionGroupName 属性设置为单个经过身份验证的用户。如果将 useAuthenticatedConnectionSharing 属性设置为 true,则忽略此属性。
请参见
概念
使用 TCP 信道进行身份验证
使用 IPC 信道进行身份验证
加密和消息完整性
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。