Я в настоящее время работаю с корпоративным приложением в среде.NET (n-layered), и я хотел бы знать лучший способ справиться с аутентификацией / авторизация + данные, просачивающиеся мой BussinessLayer (BL). Мы будем использовать тот BL от нескольких интерфейсов (приложения ASP.NET и WebServices), и я думаю, что мой ServiceLayer должен сделать задание, но я просто не могу найти лучший способ.
Я предполагаю, что это могло быть что-то вроде этого: (1) Пользователь аутентифицируется (веб-клиент ASP.NET), возможно, с помощью FormsAuthentication. (2) Код.NET ASP (Контроллер / CodeBehind) instanciate Сервис получить некоторый пользовательский сделанный случай, передавая так или иначе 'Пользователя'. (3) Сервисный метод проверяет, существует ли 'Пользователь' (аутентификация) и его роли (авторизация) проверить, что он может назвать тот метод. Если не аутентифицируемый или авторизованный исключение выдается. (4) Сервис использует репозитории + другие сервисы + независимо от того, что это должно было сделать задание. Если некоторая мелкозернистая фильтрация требуется (например, у Пользователя только есть полномочия по некоторым проектам), сервис применяет ее автоматически.
То, что я хочу, должно было изолировать ServiceLayer от 'веб-материала' (не доступ к сессии...), но кто знает, что Пользователь, называющий ее методы, действует правильно. Также я не знаю, как соответствовать той работе аутентификации.NET ASP хорошим способом... Я думаю в suministrating 'Пользователь' в Сервисе ctor, так, чтобы его методы имели 'контекст', в котором они нуждаются, который мог работать?... Я ценил бы некоторые признаки или существующие фрагменты кода на этом.
Спасибо за Вашу справку...
Прежде всего, аутентификация и авторизация являются двумя отдельными вещами. Ваш вопрос подразумевает, что вы уже знаете это, но я просто хотел быть явным об этом.
Аутентификация должна происходить на границе приложения (например, формы аутентификации в веб-приложении).
Подход по умолчанию состоит в том, что модуль аутентификации наборы Thread.CurrentPrincipal при успешной аутентификации.
В целом IPrincipal является стандартной основой для моделирования пользовательского контекста в .NET. Например, httpContext.user является IPRINCIPAL.
В вашем доменном виде и модулям доступа к данным вы можете использовать Thread.CurrentPrincipal для реализации логики авторизации. Это позволяет вам варьировать аутентификацию и авторизацию независимо друг от друга.
Извините за задержку, но я думаю, что TekPub Screencast просто великолепен.
-121--2319250-использовать awk
URL="1.1.1.1/login.php?user=admin&pass=password"
awk -vurl="$URL" '/http:\/\//{ gsub("http://" , "http://"url) }1' file
, но вы действительно уверены, что хотите заменить http ://??
-121--4435348-Для меня я думаю, что это и проще, и более расширяемо, если вы позволите клиентским уровням (ваш веб-сайт/услуги) выполнить аутентификацию и оставить BL, чтобы содержать только бизнес-логику.
Если вам нужна ссылка на текущего пользователя в BL, вы можете рассмотреть интерфейс для «обтекания» некоторой идентификационной информации пользователя, и она может быть передана из различных уровней UI.