共用方式為


未使用認證交涉的 Windows 用戶端訊息安全性

下列案例會顯示 Kerberos 通訊協定所保護的 Windows Communication Foundation (WCF) 用戶端和服務。

服務和用戶端都是在相同的網域或受信任網域中。

ms735117.note(zh-tw,VS.90).gif注意:
這個案例和Windows 用戶端的訊息安全性之間的差異是,這個案例不會在傳送應用程式訊息之前與服務交涉服務認證。此外,因為這必須使用 Kerberos 通訊協定,所以此案例還需要 Windows 網域環境。

未使用認證交涉的訊息安全性

特性 描述

安全性模式

訊息

互通性

具備此特性,有 WS-Security 搭配 Kerberos 權杖設定檔相容的用戶端

驗證 (伺服器)

交互驗證伺服器和用戶端

驗證 (用戶端)

交互驗證伺服器和用戶端

完整性

機密性

傳輸

HTTP

繫結

WSHttpBinding

服務

下列程式碼和組態要獨立執行。執行下列其中一項:

  • 使用不含組態的程式碼建立獨立服務。
  • 使用提供的組態建立服務,但不要定義任何端點。

程式碼

下列程式碼會建立使用訊息安全性的服務端點。程式碼會停用服務認證交涉以及安全性內容權杖 (SCT) 的建立。

ms735117.note(zh-tw,VS.90).gif注意:
若要在沒有交涉的情況下使用 Windows 認證類型,服務的使用者帳戶必須可以存取已在 Active Directory 網域中註冊的服務主要名稱 (SPN)。執行這項作業的方法有兩種:

  1. 使用 NetworkServiceLocalSystem 帳戶來執行服務。因為這些帳戶可以存取電腦加入 Active Directory 網域時所建立的電腦 SPN,WCF 會自動在服務中繼資料 (Web 服務描述語言或 WSDL) 的服務端點內產生適當的 SPN 項目。
  2. 使用任意的 Active Directory 網域帳戶來執行服務。在這種情況下,您必須建立該網域帳戶的 SPN。使用 Setspn.exe 公用程式工具來建立,是其中一種方法。一旦建立了服務帳戶的 SPN,請設定 WCF 以透過它的中繼資料 (WSDL) 將該 SPN 發行至服務的用戶端。不論是透過應用程式組態檔或程式碼,都可以設定公開端點的端點身分識別來完成此作業。下列範例會以程式設計方式發行身分識別。

如需 SPN、Kerberos 通訊協定和 Active Directory 的詳細資訊,請參閱 Windows 的 Kerberos 技術資訊補充 (本頁面可能為英文)。如需 端點身分識別的詳細資訊,請參閱 SecurityBindingElement 驗證模式

組態

可以使用以下組態來取代程式碼。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors />
    <services>
      <service behaviorConfiguration="" name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator" 
                  binding="wsHttpBinding"
                  bindingConfiguration="KerberosBinding"
                  name="WSHttpBinding_ICalculator"
                  contract="ServiceModel.ICalculator" 
                  listenUri="net.tcp://localhost/metadata" >
         <identity>
            <servicePrincipalName value="service_spn_name" />
         </identity>
        </endpoint>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="KerberosBinding">
          <security>
            <message negotiateServiceCredential="false" 
                     establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

用戶端

下列程式碼和組態要獨立執行。執行下列其中一項:

  • 使用此程式碼 (和用戶端程式碼) 建立獨立用戶端。
  • 建立未定義任何端點位址的用戶端,然後改用可接受組態名稱當做引數的用戶端建構函式。例如:

程式碼

下列程式碼會設定用戶端。安全性模式設定為 Message,而用戶端認證類型設定為 Windows。請注意,NegotiateServiceCredentialEstablishSecurityContext 屬性會設定為 false

ms735117.note(zh-tw,VS.90).gif注意:
若要在沒有交涉的情況下使用 Windows 認證類型,就必須先使用服務的帳戶 SPN 設定用戶端,再開始與服務進行通訊。用戶端會使用 SPN 取得 Kerberos 權杖,以驗證並保護與服務進行的通訊。下列範例示範如何使用服務的 SPN 來設定用戶端。當您正在使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 產生用戶端時,如果服務的中繼資料包含服務的 SPN,這項資訊將會自動從服務的中繼資料 (WSDL) 傳播至用戶端。如需 如何設定服務以便在服務中繼資料內包含 SPN 的詳細資訊,請參閱本主題稍後的<服務>一節。

如需 SPN、Kerberos 和 Active Directory 的詳細資訊,請參閱 https://go.microsoft.com/fwlink/?LinkId=88330 (本頁面可能為英文)。如需 端點身分識別的詳細資訊,請參閱 SecurityBindingElement 驗證模式主題。

組態

下列程式碼會設定用戶端。請注意,<ServicePrincipalName> 項目必須設定為符合服務帳戶在 Active Directory 網域中註冊的服務 SPN。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="Windows" 
                     negotiateServiceCredential="false"
                     establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://localhost/Calculator" 
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator"
                contract="ICalculator"
                name="WSHttpBinding_ICalculator">
        <identity>
          <servicePrincipalName value="service_spn_name" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

請參閱

概念

安全性概觀
服務身分識別和驗證