Share via


以 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()); 
Note注意:

絕對不要將認證加以硬式編碼,並放在應用程式中。此處作法僅供說明用途。

useAuthenticatedConnectionSharing 屬性,指出伺服器通道會重複使用驗證的連線,而不是驗證每個傳入的呼叫。當 useDefaultCredentials 設為 true,此屬性將預設為 true。您可以透過組態檔 (於 <channel> 項目中) 或以程式設計方式來設定此屬性 (與上述範例程式碼用來設定 usernamepassword 屬性的方式一模一樣)。

unsafeAuthenticatedConnectionSharing 屬性指出用戶端會提供本身的認證與連線群組名稱,以供伺服器用來建立驗證的連線群組。如果此屬性設為 true,則 connectionGroupName 屬性必須設為單一驗證使用者。如果 useAuthenticatedConnectionSharing 屬性設定為 true,則會忽略這個屬性。

請參閱

概念

以 TCP 通道進行驗證
以 IPC 通道進行驗證
加密和訊息完整性

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.