Подтвердить что ты не робот

Как создать интеграцию LDAP для моего веб-приложения?

Моя компания разрабатывает и продает приложение SaaS, в котором сотни клиентов. Некоторые из наших клиентов попросили нас поддерживать интеграцию LDAP для аутентификации учетных записей пользователей с их существующими системами вместо того, чтобы создавать другую учетную запись для каждого из своих сотрудников. Похоже, что во многих местах это называется Single Sign On (SSO)? Естественно, наша система уже имеет механизм для поддержания профилей учетной записи пользователя и аутентификации этих учетных записей пользователей на нашей странице входа.

Мы немного незнакомы с LDAP и сбиты с толку о некоторых вещах. Пожалуйста, извините за возможное использование неправильной терминологии (помните, мы немного невежественны об этом).

Мы думаем, что понимаем основы того, как это может работать:

  • Наш клиент настраивает свою учетную запись для "включения" функции "удаленной аутентификации" для своей учетной записи. Они предоставляют удаленный URL-адрес, который будет аутентифицировать своих пользователей.
  • Пользователи приходят на нашу страницу входа в систему и пытаются войти в систему, используя свое имя пользователя и пароль, предоставленные их системой LDAP компании.
  • Наша страница входа в систему будет безопасно перенаправлять учетные данные для входа (предположительно зашифрованные и хешированные в некотором согласованном формате) на URL-адрес "удаленной аутентификации", предоставленный нашим клиентом.
  • Клиент script будет аутентифицировать пользователя, а затем перенаправить его обратно на наш сайт с "статусом аутентификации".
  • На нашей странице будет проанализирован "статус аутентификации" и либо будет принят пользователем, либо зарегистрирован.

Предполагая, что приведенная выше информация является даже неполной, нам все равно потребуется, чтобы каждый пользователь имел учетную запись в нашей системе. Не нужно ли нам каким-либо образом синхронизировать профили учетных записей пользователей с профилями пользователей в каталоге LDAP? Это просто "внешний идентификатор", который ссылается на идентификатор пользователя в системе LDAP? Будет ли тогда потребоваться, чтобы клиент "удаленная аутентификация" script должен предоставить этот идентификатор нашей системе, чтобы мы знали, какая учетная запись пользователя в нашей системе должна связывать логин с?

Что нам не хватает?

BTW, наша платформа - IIS, ASP.Net 2.0 и SQL Server 2005.

4b9b3361

Ответ 1

Существует несколько вариантов. Если вы действительно имеете в виду LDAP, а не только Active Directory, я бы, вероятно, посмотрел на использование System.DirectoryServices.Protocols для выполнения привязки LDAP с помощью предоставленных учетных данных через защищенный канал.

Строго говоря, это не Single Sign-On. SSO означает, что вам нужно отправить свои кредиты только один раз при первом входе в систему. Это просто уменьшает сложность для пользователей, имея только один идентификатор. Обычно для клиентов Windows в корпоративной среде со смесью платформ и технологий SSO достигается добавлением клиента на рабочий стол, который управляет аутентификацией в различных системах. В среде MS-only вы можете достичь единого входа, если все ваши веб-приложения находятся в IIS, вы используете IE и используете встроенную проверку подлинности Windows, олицетворение и все это.

Вы можете рассмотреть возможность автоматической регистрации пользователя, прошедшего проверку подлинности, в вашу систему, если не требуется предварительно настроить данные профиля. Если вам требуется предварительная настройка пользователей, вы можете регулярно импортировать (все или отфильтрованные подмножества) из каталога LDAP и иметь их в неконфигурированном состоянии, чтобы администраторы выбирали из существующего списка не -конфигурированных пользователей, а не набирать идентификаторы. В противном случае вы рискуете ввести администраторов в неправильный идентификатор пользователя и иметь несоответствия.

Вы можете предоставить API, чтобы решения Identity and Access Management (учитывая ваш наклон Microsoft, см. ILM2 007 в качестве примера) могут интегрироваться с вашей системой и выполнять все управление учетной записью пользователя для вас.

Ответ 2

Как всегда помните, чтобы проверить проверку подлинности, чтобы убедиться, что отправленный пароль не пуст.

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

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

Ответ 3

Возможно, рассмотрите Authentication Vs Authorization

Аутентификация - какой пользователь это? Авторизация - кто должен иметь возможность использовать приложение, указанных пользователей, групп?

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

Если вы используете каталог вместо своего настраиваемого хранилища данных, то

  • используйте метод подключения к каталогу для аутентификации пользователя
  • вы (можете) получить аутентификацию бесплатно - пользователь известен окнам, окна могут идентифицировать iis и sqlserver, возможно, нет необходимости спрашивать пользователя, кто они.
  • вы узнаете больше пользователей, чем авторизацию и должны применять ограничения - ограничьте соединения с определенной группой.
  • может хранить пользовательские данные в каталоге, а не данные вашего приложения на сервере sql.

Если вашим пользователям действительно нужен общий LDAP, тогда вы хотите посмотреть (C) ldap_connect, ldap_bind_s (С#) LDAPConnection System.DirectoryServices.Protocols

Или снова в AD это Демистифицированное однопользовательское приложение Net. может помочь

Ответ 4

Вам нужно решить, как вы планируете связать пользователя LDAP с учетной записью в своем приложении.

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

Как только вы выяснили эту ссылку, вы можете просто выполнить привязку LDAP для проверки учетных данных пользователя.

Ответ 5

Как это работает в нашей системе:

  • Когда пользователь переходит к веб-приложению, серверная переменная REMOTE_USER считается токеном пользователя
  • Код входа подключается к каталогу ldap со специальной учетной записью
  • Код входа в систему ищет учетную запись ldap, которая "соответствует" REMOTE_USER
  • Код входа затем пытается сопоставить эту учетную запись с учетной записью в нашей системе.
  • Если совпадение возможно на всем пути, предположим, что пользователь зарегистрировался как совпадающая учетная запись, продолжайте нормально

Таким образом, пользователь может повторно использовать свою аутентификацию домена Windows в нашем приложении.

Ответ 6

Вот одна полезная часть программного обеспечения, которое позволяет обращаться к каталогам LDAP через Интернет с помощью JSON-RPC: Json2Ldap