簡體   English   中英

為什么kerberos在WCF中默認為NTLM?

[英]Why is kerberos defaulting to NTLM in WCF?

有一個簡單的WCF演示應用程序,有兩個控制台項目 - 主機和客戶端。 兩者都在我的機器上運行(贏7盒)。 我正在使用netTcpBinding,它使用Windows身份驗證。

問題是認證從kerberos降級到NTLM,我無法弄清楚原因。

如果我使用

<clientCredentials>
   <windows allowNtlm="true" />
</clientCredentials>

在客戶端,一切都很酷。 但如果我將其更改為false ,我會得到以下異常:

SecurityNegotiationException:遠程服務器不滿足相互身份驗證要求。

這表明kerberos失敗,並且由於客戶端不允許NTLM,因此調用會導致異常被拋出。

這是項目的問題,還是由我的開發機器配置引起的外部問題?


解:

顯然,我必須在客戶端配置中指定服務器的標識。 就我而言,服務器是以我的身份運行的,所以我這樣修改了客戶端:

<client>
  <endpoint address="net.tcp://dev7.HurrDurr.com:12345/MyService" 
            binding="netTcpBinding" 
            bindingConfiguration="MyBindingConfigurationLol" 
            behaviorConfiguration="HurrDurrServiceEndpoint" 
            contract="ShaolinCore.ICommunicationService">
    <!-- start changes here -->
    <identity>
      <userPrincipalName value="myusername@mydomain"/>
    </identity>
    <!-- end changes here -->
  </endpoint>
</client>

我不確定為什么這會解決這個問題。 好的,現在在客戶端我完全信任服務器(嘿,我知道那個人!)。 但由於NTLM不如kerberos安全,為什么不相反呢? 如果我不完全信任服務器,我使用kerberos,否則ntlm很好。

或者,OTOH,如果我不完全信任服務器,為什么它可以工作? “SecurityException:未設置端點標識.WCF無法信任服務器的身份,也不會傳輸客戶端身份。”

當我在IIS4,5和6開發團隊工作時,我們遇到了很多! 要使Curb起作用,您需要滿足以下條件:

1)雙方支持限制(所有支持的Windows版本支持Curb今天)

2)機器驗證到Active Directory

3)為服務器端點注冊的服務主體名稱(SPN)。 在“過去的好日子”中,您必須使用SetSPN.exe手動執行此操作。 SPN只是Curb將連接的端點; 它需要這些數據來支持相互認可。 大多數應用程序會為您調用approp API(DsWriteAccountSpn)

如果上述任何步驟都不成立,Windows 通常會默認為NTLM,而只提供客戶端身份驗證。

希望有所幫助! - 邁克爾

服務器是如何配置的? 在配置文件中是否有<authentication mode="Windows"/><identity impersonate="true"/>

您可以通過配置文件中的身份驗證標記設置身份驗證模式:

<configuration>
  <system.web>
    <authentication mode="Windows" />
  </system.web>
</configuration>

也許MSDN上的這個頁面 - 調試Windows身份驗證錯誤 - 幫助你弄清楚發生了什么 - 似乎在使用NTLM與Kerberos時相當棘手。

Fyi通過MSDN:netTcpBinding:默認綁定使用傳輸安全性和協商身份驗證。 此協商嘗試使用Kerberos,但如果這不起作用,它將退回並使用舊的NTLM協議 如果您在域環境中,Kerberos是一個很好的選擇; 為了使用它,您需要在域帳戶下運行您的服務和客戶端。 您還需要為服務配置服務主體名稱(SPN)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM