Единый вход для приложения .NET, интегрированного с Active Directory

У нас есть несколько клиентов, использующих наше веб-приложение (не интранет), некоторые клиенты хотят, чтобы их логин был интегрирован с Active Directory их организации. Они просто хотят, чтобы этот пользователь вошел в свою учетную запись Windows и мог получить доступ к веб-приложению без ввода каких-либо учетных данных.

Я прочитал несколько статей о ADFS, но до сих пор не знаю, как это интегрировать или реализовать. Любое предлагаемое решение?

Спасибо!


person Sabby62    schedule 12.06.2012    source источник
comment
Ваше приложение размещено внутри компании или в облаке?   -  person bloudraak    schedule 13.06.2012
comment
Вопрос слишком открытый. Похоже, вы мало читали про ADFS - иначе вы бы не задались вопросом, как это реализовать. Вы просто загружаете ADFS, устанавливаете его рядом с Active Directory, открываете доступ и делаете свое веб-приложение совместимым с федерацией. Есть хорошие книги по этому поводу, такие как бесплатная электронная книга от MS, идентификация на основе претензий и контроль доступа. Пожалуйста, прочтите электронную книгу, задавайте более конкретные вопросы, и вы получите свои ответы.   -  person Wiktor Zychla    schedule 13.06.2012
comment
Просто к сведению, реализация аутентификации на основе утверждений имеет тенденцию быть очень нетривиальной.   -  person Kenneth Ito    schedule 13.06.2012


Ответы (3)


Если вы разрабатываете приложение на основе .NET, Microsoft предоставляет библиотеку под названием WIF, который используется для + - удобного взаимодействия с AD FS (конфигурация + небольшая адаптация кода для получения утверждений из сообщения аутентификации, предоставленного AD FS).

Существует несколько протоколов, которые поддерживают как AD FS 2.0, так и WIF, чтобы обеспечить работу единого входа, наиболее распространенными из них являются (afaik) SAML 2.0 и WS-Federation. Оба они построены на XML-сообщениях, но вам не обязательно знать подробности, если вы используете WIF.

Для WS-Federation библиотека WIF предоставляет подключаемый модуль для Visual Studio, который позволяет настроить ваш сайт в качестве проверяющей стороны с помощью AD FS.

Вы МОЖЕТЕ использовать учетные данные в своей БД для идентификации пользователей, вы действительно можете настроить Вся страница входа в AD FS и события проверки подлинности. Однако базовая установка требует, чтобы каждый пользователь был определен в вашей Active Directory. Вы также можете использовать свою БД в качестве хранилища утверждений (другая база данных, которую AD FS будет использовать для предоставления зависимым приложениям информации о пользователях). Обратите внимание: если вы собираетесь использовать AD за AD FS, ваша служба AD FS должна иметь к нему доступ и запрашивать LDAP, что, я не уверен, сработает для вас, если ваши пользователи войдут в свой локальный домен, который AD FS не знаком с.


ЕСЛИ вам не требуется поддерживать стандартные отраслевые протоколы единого входа (SAML 2.0, о которых я упоминал), я не уверен, что внедрение AD FS будет таким хорошим решением. Это заставляет вас работать определенным образом, что не всегда так удобно.

person YavgenyP    schedule 13.06.2012
comment
Ссылка WIF мертва. Путь к работе microsoft. - person Maslow; 16.01.2018
comment
@Maslow Исправил ссылку. - person techvice; 18.01.2018

В вашем вопросе явно не указано, ограничены ли вы использованием ADFS для реализации единого входа. ADFS, безусловно, является одним из способов сделать это. Вы можете посмотреть OpenID-LDAP (был на www.openid-ldap.org, но проект сейчас не существует) и другие поставщики удостоверений в качестве альтернативы для реализации единого входа.

Одна из альтернатив - реализовать поставщика OpenID, который использует встроенную проверку подлинности Windows. Они могут установить его в своей демилитаризованной зоне, предоставив доступ в Интернет вместо ADFS. Он может разрешить единый вход из Internet Explorer и Chrome.

Внедрение провайдера OpenID - нетривиальное дело. Придется уделять пристальное внимание безопасности. К счастью, существует ряд фреймворков, например DotNetOpenAuth, которые могут вам помочь.

При использовании OpenID ваше «облачное» приложение будет действовать как полагающийся OpenID и получит заявленный идентификатор среди других атрибутов от провайдера OpenID. Вы должны сохранить это в своей базе данных, чтобы однозначно идентифицировать пользователя. Вы можете реализовать поставщика OpenID таким образом, чтобы он также мог предоставлять вашему облачному приложению минимальную информацию, такую ​​как адрес электронной почты, имя человека и т. Д.

Преимущество использования OpenID состоит в том, что ваше «облачное» приложение может продолжать поддерживать других известных поставщиков OpenID, таких как Google и Yahoo, без особых изменений.

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

person bloudraak    schedule 13.06.2012

Требуется более подробная информация в соответствии с комментариями.

Здесь есть хороший источник: Карта содержимого AD FS 2.0.

Электронная книга находится здесь.

Я мог бы представить себе один сценарий, в котором вы привязываете свое облачное приложение к Azure ACS, ваши клиенты устанавливают ADFS поверх своих AD и объединяют свои ADFS с ACS. Это даст вам необходимую функциональность.

Обновление после комментария:

ADFS может аутентифицироваться только в AD. Он не может аутентифицироваться в базе данных. Он может получать атрибуты из базы данных SQL Server, которые затем можно преобразовать в утверждения, т.е. он может использовать базу данных SQL для авторизации.

Если вы хотите пройти аутентификацию в базе данных SQL, у вас есть два варианта.

  1. Создайте собственный STS
  2. Используйте существующую «настраиваемую» службу STS, например Identity Server, которая позволяет использовать эту функцию.
person rbrayb    schedule 13.06.2012
comment
Требуется дополнительная информация о следующем: в настоящее время пользователь вошел в веб-приложение, проверив учетные данные, хранящиеся в базе данных. Можно ли реализовать что-то вроде того, что учетная запись пользователя активного каталога сопоставляется с определенной учетной записью в базе данных и имеет те же роли и функции, что и в базе данных. - person Sabby62; 13.06.2012