2011-01-27 2 views
9

Мой сценарий - это трехуровневое приложение, в котором уровень данных является базой данных SQL Server, средний уровень - это приложение WCF, размещенное в службе Windows, и, наконец, презентация - это приложение Asp.Net MVC ,Аутентификация WCF/ASP.NET

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

Хорошо, пока все хорошо! НО теперь вот вопрос: как вы справляетесь с безопасностью в таком сценарии? Я имею в виду, что пользователь должен войти в приложение ASP.NET, но я хочу, чтобы его аутентифицировать не только в ASP, но и в среднем уровне WCF, так как для доступа к сервису WCF требуется больше приложений.

Я хочу, чтобы пользователь входил в приложение Asp.Net, а WCF также знал учетные данные. Есть ли какая-то сессия в WCF, в которой указывается зарегистрированный пользователь?

Как профессионалы обрабатывают безопасность в этом случае? Я знаю, что вы можете защитить службы WCF безопасностью сообщений, но как синхронизировать Asp.Net и WCF с одним зарегистрированным пользователем? Я хочу защитить действия WCF в зависимости от пользователя для средств авторизации.

+0

Это слишком большой вопрос для обработки SO - он занимает 50 страниц в учебном комплекте WCF. Предложите начать с некоторых исследований, а затем разместите любые конкретные вопросы, которые у вас есть - http://mscerts.net/programming/user-level%20security%20%20%20authorization%20and%20impersonation%20%28part%201%29%20 -% 20authorization.aspx –

+0

Приложение N-Tier? Что такое N? 2? 3? 20? –

+0

Это сформулировано в неопределенном общем виде, но вопрос остается в силе. Я хочу, чтобы пользователь, прошедший аутентификацию ASP.NET, передал цепочку в службу WCF как зарегистрированный пользователь. Почему это так сложно? – DaveN59

ответ

2

Я хотел бы предложить глядя с использованием подхода, как HMAC (Hash Message Authentication код) для вашей безопасности или аналогичного подхода на основе маркеров. Идея заключалась бы в том, чтобы подписать ваши запросы на ваш уровень WCF, который может использоваться для аутентификации запроса и идентификации пользователя, делающего запрос.

Важными элементами будут токены и общий секрет, используемый для подписи каждого запроса. Токен позволит вам идентифицировать пользователя на конце WCF и найти общий секрет для проверки запроса. Вы также можете добавить отметки времени/ноты для предотвращения повторных атак и т. Д.

Я использовал этот подход для некоторых служб REST, построенных на WCF, с дополнительным преимуществом, что клиентам не нужно хранить имена пользователей и пароли, а именно теги безопасности, используемые для связи. В вашем случае вам нужно будет разобраться, как обменять токены между уровнем ASP.NET и уровнем WCF, но он предоставит вам единый метод проверки подлинности для любого пользователя ваших служб WCF.