Использование NegotiateStream, когда домен недоступен - PullRequest
0 голосов
/ 17 сентября 2010

Я использую 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 Ответ

1 голос
/ 31 октября 2010

Kerberos (и в меньшей степени NTLM) довольно терпимо относится к кратковременным сбоям в сети между сервером и DC.Как только пользователь получит действительный билет ограничения для сервера, сервер продолжит аутентифицировать пользователя, даже если сервер (или клиент) не сможет связаться с контроллером домена.Срок действия таких билетов по умолчанию составляет 10 часов, что обычно покрывает людей с временными сбоями в течение обычного рабочего дня.

Сеансы NTLM кэшируются более 15 минут (в последний раз я проверял это, а это 4-5лет назад), поэтому временные сбои должны были быть более кратковременными, чем "час или три".

Каков ожидаемый период времени простоя между клиентом (или сервером) и контроллерами домена?[В сторону: если это действительно плохо, почему бы не расследовать падение DC с более низким напряжением питания (даже копию только для чтения, если вы используете AD 2008) на ближней стороне сегмента сети с потерями?]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...