2010-09-17 43 views
0

我正在使用NegotiateStream來驗證客戶端/服務器應用程序。服務器端代碼看起來是這樣的:當域不可用時使用NegotiateStream

SecureStream = new NegotiateStream(Stream, true); 

SecureStream.AuthenticateAsServer(
    CredentialCache.DefaultNetworkCredentials, 
    ProtectionLevel.EncryptAndSign, 
    TokenImpersonationLevel.Identification); 

if (!SecureStream.IsAuthenticated) 
{ 
    return false; 
} 
WindowsPrincipal principal = new WindowsPrincipal(
    (WindowsIdentity)SecureStream.RemoteIdentity); 

// ExpectedRoles is a string[] of possible roles 
foreach (string role in ExpectedRoles) 
{ 
    if (principal.IsInRole(role)) 
     return true; 
} 

的客戶端代碼看起來是這樣的:

SecureStream = new NegotiateStream(Stream, true); 
SecureStream.AuthenticateAsClient(); 
if (!SecureStream.IsAuthenticated) 
{ 
    return false; 
} 

客戶端和服務器可以在同一個域的單獨的網絡段上運行。因此,如果他們位於與域控制器不同的部分,並且互聯網連接斷開,他們應該能夠以離線方式運行。問題是,一些域配置使用戶無法在域斷開連接模式下進行身份驗證(顯然將該功能關閉是一種安全措施)。

所以我想弄清楚一個身份驗證模型,該身份驗證模型將允許我在域不可用時將非域用戶認證爲回退位置。

回答

1

Kerberos(以及較低程度的NTLM)非常容忍服務器和DC之間的暫時網絡中斷。一旦用戶獲得了服務器的有效限制標籤,即使服務器(或客戶端)無法聯繫DC,服務器仍將繼續對用戶進行身份驗證。此類門票的默認使用期限爲10小時,通常涵蓋人們在日常工作日期間的暫時停電。

NTLM會話被緩存了15分鐘(最後我檢查了這個,這是4-5年前),所以暫時停機將不得不比「一小時或三小時」更短暫。

客戶端(或服務器)與DC之間的預期中斷時間段是多少? [另外:如果確實是不好,爲什麼不考慮在有損網段的附近丟掉一個低功率DC(即使是隻讀副本,如果你正在運行2008 AD)?]

+0

不幸的是,我是一名程序員,而不是網絡專家,所以我不知道如何描述問題。但我的理解是,有一些設置會禁用您在此處描述的默認行爲(出於安全原因),並且某些網絡管理員將其保留爲禁用狀態(出於安全原因),但希望軟件繼續工作。我會提出一箇中等特區的建議,看看他們對此有何看法。但在網絡配置方面我沒有太多的發言權,除了提供建議之外。 – 2010-11-02 22:05:31

+0

我認爲更糟糕的情況下中斷可能會在幾天的時間範圍內,但我不知道這是多麼普遍。一整天可能並不是聞所未聞的,其中涉及使用物理媒體複製數據。 – 2010-11-02 22:09:36

相關問題