ASP.NET MVC и WCF-аутентификация / авторизация в Active Directory с профилями на SQL-сервере - PullRequest
1 голос
/ 08 декабря 2011

У меня есть приложение для внутренней сети, к которому клиенты также могут получить доступ из Интернета. Что мне нужно сделать, так это предоставить пользователям, которые получают к нему доступ из Интернета, форму входа для ввода учетных данных и проверки их на соответствие AD. Пользователи, которые получают доступ к этому приложению из интрасети, должны войти в систему автоматически.

Как я знаю, я не могу смешивать два типа аутентификации в проектах ASP.NET. Поэтому мне нужно использовать FormsAuthentication с ActiveDirectoryMembershipProvider для аутентификации пользователей. Но как насчет профилей? Мне нужно выбрать профили на основе группы пользователей (то есть, если это профиль загрузки менеджера из таблицы менеджеров, если это клиент - из таблицы клиентов).

Вторая проблема заключается в том, что мне нужно использовать учетные данные проверенных лиц для доступа к службам WCF. И определите, что они могут / не могут сделать, основываясь на членстве в группе.

Является ли использование FormsAuthentication правильным способом для этого, или мне нужно искать в другом месте?

Я использую EF-код для создания базы данных. Сервисы реализованы как сервисы WCF. Само приложение представляет собой сайт ASP.NET MVC. Но в далеком будущем мне понадобится клиент WP7.

1 Ответ

1 голос
/ 09 декабря 2011

У нас был набор схожих требований, и мы подошли к нему, чтобы самим реализовать аутентификацию и управление профилями, а после аутентификации пользователя использовать FormsAuthentication для безопасности сайта.

Для сценариев, в которыхпредоставляются имя пользователя и пароль (форма входа, клиент wcf), вы можете вызвать метод LogonUser .После аутентификации пользователя вы можете использовать его аутентифицированное имя пользователя в FormsAuthentication.

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

Способ, который мы решили, заключался в том, чтобы добавить отдельное веб-приложение в качестве подкаталога основного приложения и настроить его для поддержки только проверки подлинности Windows.Когда этот портал поражен внутренними пользователями, мы принимаем их логин AD из Request.ServerVariables ("logon_user"), шифруем его токеном, действующим в течение 5 секунд, а затем отвечаем. Перенаправляем пользователя в основное приложение в зашифрованной сетивойдите в строку запроса.

Если основное приложение видит этот параметр в строке запроса, оно дешифрует его, проверяет, находится ли оно в допустимом интервале времени, а затем использует эти учетные данные для входа пользователя в систему с использованием FormsAuthentication (это может звучать много, ноописание на самом деле занимает больше места, чем код).

Надеюсь, это даст вам некоторые идеи.

...