Авторизация и информация о Пользователе на Уровне служб (приложение.NET)

Я в настоящее время работаю с корпоративным приложением в среде.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, так, чтобы его методы имели 'контекст', в котором они нуждаются, который мог работать?... Я ценил бы некоторые признаки или существующие фрагменты кода на этом.

Спасибо за Вашу справку...

9
задан Víctor Velarde 18 January 2010 в 11:19
поделиться

2 ответа

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

Аутентификация должна происходить на границе приложения (например, формы аутентификации в веб-приложении).

Подход по умолчанию состоит в том, что модуль аутентификации наборы Thread.CurrentPrincipal при успешной аутентификации.

В целом IPrincipal является стандартной основой для моделирования пользовательского контекста в .NET. Например, httpContext.user является IPRINCIPAL.

В вашем доменном виде и модулям доступа к данным вы можете использовать Thread.CurrentPrincipal для реализации логики авторизации. Это позволяет вам варьировать аутентификацию и авторизацию независимо друг от друга.

12
ответ дан 4 December 2019 в 14:28
поделиться

Извините за задержку, но я думаю, что 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.

2
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: