【问题标题】:Using NegotiateStream when domain is unavailable域不可用时使用 NegotiateStream
【发布时间】:2010-09-17 19:44:34
【问题描述】:

我正在使用 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;
}

客户端和服务器可以运行在同一个域的不同网段上。因此,如果它们与域控制器位于不同的网段,并且互联网连接中断,它们应该能够以离线方式运行。问题是,某些域的配置使用户无法在域断开模式下进行身份验证(显然关闭该功能是一种安全措施)。

因此,我正在尝试找出一种身份验证模型,该模型允许我在域不可用时对非域用户进行身份验证作为后备位置。

【问题讨论】:

    标签: c# dns windows-authentication offline


    【解决方案1】:

    Kerberos(以及较小程度的 NTLM)对服务器和 DC 之间的瞬时网络中断具有相当的容忍度。一旦用户获得了服务器的有效 Curb 票证,服务器将继续对用户进行身份验证,即使服务器(或客户端)无法联系 DC。此类票证的默认生命周期为 10 小时,这通常涵盖人们在日常工作日的短暂中断。

    NTLM 会话被缓存了大约 15 分钟(我上次检查过这个,那是 4 到 5 年前),所以短暂的中断必须比“一三个小时”更短暂。

    客户端(或服务器)与 DC 之间的预期中断时间范围是多少? [旁白:如果它真的很糟糕,为什么不调查在有损网段的近端放置一个功率较低的 DC(即使是只读副本,如果您正在运行 2008 AD)? ]

    【讨论】:

    • 很遗憾,我是程序员,不是网络专家,所以我不知道如何描述这个问题。但我的理解是,有一些设置会禁用您在此处描述的默认行为(出于安全原因),某些网络管理员将其禁用(出于安全原因),但仍希望软件能够正常工作。我会提供辅助 DC 的建议,看看他们对此有何看法。但我在网络配置方面并没有太多发言权,只是提供建议。
    • 我认为更糟糕的情况下中断可能会出现在几天的时间范围内,但我不知道这种情况有多普遍。一整天可能并非闻所未闻,这将涉及使用物理媒体复制数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多