以 HTTP 通道進行驗證
若要以 HttpChannel 通道來驗證遠端呼叫,遠端物件必須使用網際網路資訊服務 (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 通道進行驗證
加密和訊息完整性
Copyright © 2007 by Microsoft Corporation. All rights reserved.