Как получить учетные данные AD с клиентского компьютера в веб-приложении? - PullRequest
2 голосов
/ 10 октября 2008

Можно ли получить учетные данные activedirectory для пользователя на клиентском компьютере из веб-приложения?

Чтобы уточнить, я разрабатываю веб-приложение, которое будет размещаться в интрасети клиента.

Существует требование, чтобы пользователь приложения не запрашивался учетные данные при доступе к приложению, и вместо этого учетные данные пользователя, вошедшего в систему на клиентском компьютере, должны быть получены автоматически, без взаимодействия с пользователем.

Ответы [ 4 ]

5 голосов
/ 10 октября 2008

Абсолютно. Это особенно полезно для приложений в интрасети.

Поскольку вы не указали свою среду, я предполагаю, что это .NET, но, конечно, это не единственный способ.

Active Directory можно легко запросить, используя LDAP . Если вы используете .NET, вы можете сделать что-то вроде этого примера кода или моего примера ниже. Вы также можете сделать это в средах SQL .

Если вам нужна только Windows для обработки аутентификации, вы можете, например, настроить веб-приложение .NET для Аутентификация Windows . Обязательно отключите анонимные логины в IIS для вашего приложения. После этого вы сможете получить доступ к имени пользователя для входа в Windows и использовать его для дальнейших проверок безопасности (например, их членство в группе / роли в AD).

Вы также можете упростить весь беспорядок, используя что-то вроде блока приложения безопасности Enterprise Library .


Вот краткий пример C #: (преобразовать в VB.NET здесь )

using System.DirectoryServices;

/// <summary>
/// Gets the email address, if defined, of a user from Active Directory.
/// </summary>
/// <param name="userid">The userid of the user in question.  Make
/// sure the domain has been stripped first!</param>
/// <returns>A string containing the user's email address, or null
/// if one was not defined or found.</returns>
public static string GetEmail(string userid)
{
    DirectorySearcher searcher;
    SearchResult result;
    string email;

    // Check first if there is a slash in the userid
    // If there is, domain has not been stripped
    if (!userid.Contains("\\"))
    {
        searcher = new DirectorySearcher();
        searcher.Filter = String.Format("(SAMAccountName={0})", userid);
        searcher.PropertiesToLoad.Add("mail");
        result = searcher.FindOne();
        if (result != null)
        {
            email = result.Properties["mail"][0].ToString();
        }
    }

    return email;
}

Вам не нужно указывать контроллер домена. Выполнение пустого / заданного по умолчанию конструктора для DirectorySearcher заставит его автоматически попытаться найти его & mdash; фактически это предпочтительный метод .

1 голос
/ 11 октября 2008

Интегрированная аутентификация Windows, пользователь должен использовать IE, и сайт должен быть на доверенных сайтах пользователя. Если все это правда, то IE передаст ваш токен безопасности Windows на веб-сайт и будет аутентифицироваться с ним. Мы делаем это с помощью SharePoint в нашей внутренней сети, в противном случае доступ к чему-либо ограниченному затруднен - ​​вам будет предлагаться каждый раз, когда вы нажимаете на документ.

1 голос
/ 10 октября 2008

Возможно, в .NET есть более прямой способ сделать это, но с помощью PHP я просто получаю доступ к нашему серверу Active Directory как к серверу LDAP.

Я не уверен, какие настройки сервера требуются для этого. Я не настроил сервер, я просто запросил его. Я также не предлагаю вам использовать PHP. Мне просто легче иметь дело с LDAP, чем пытаться подключиться непосредственно к Active Directory.

0 голосов
/ 10 октября 2008

Нет, конечно нет. Можете ли вы представить хаос, который привел бы к тому, что случайные веб-приложения смогут получить ваше имя пользователя и пароль AD?

Теперь, если вам просто нужно имя пользователя - оно находится в REMOTE_USER, если вы используете auth для интегрированных окон. Кроме того, Windows Auth автоматически зарегистрирует пользователя на вашем сайте - при условии, что вы разделяете домен (или доверяете).

Редактировать: IWA работает в сценарии интрасети, поскольку IE по умолчанию включает сайты интрасети в зоне безопасности интрасети. Кроме того, системный администратор может использовать объект групповой политики для установки других доверенных сайтов. Firefox также поддерживает NTLM , как и Opera и Chrome . В целом, это не плохой способ настроить интранет.

Обратите внимание, что вы не получаете учетные данные. Вы договариваетесь с клиентом о токене, который обеспечивает безопасность IWA (и мой пункт выше актуален).

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