2010-01-19 3 views
2

У меня есть приложение с 3 слоями, первый «datalayer», 2-й «бизнес-слонер» и 3-й сайт asp.net mvc. И я пытаюсь добавить аутентификацию форм надлежащим образом.Пользовательская аутентификация с уровнем обслуживания?

Должен ли я каким-то образом настроить его для использования бизнес-уровня? Что получает/добавляет/обновляет пользователя, который является частью аутентификации?

И в каком проекте я должен добавить подтверждение пользователя?

/M

+0

Hi @Lasse Как вы в конечном итоге решили это. –

+0

Все в одном проекте mvc на данный момент. Но http://www.pluralsight.com/training/Courses/TableOfContents/getting-started-aspdotnet-mvcservice-stack-bootstrap может быть что-то посмотреть в –

ответ

7

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

В ASP.NET MVC вы можете легко реализовать аутентификацию UserName/Password с использованием шаблона проекта по умолчанию из Visual Studio, но после аутентификации пользователя вы должны установить Thread.CurrentPrincipal.

В общем, IPrincipal является стандартным основанием для моделирования пользовательского контекста в .NET. Например, HttpContext.User является IPrincipal.

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

Если вам нужно работать с более богатой концепцией пользователя в вашей модели домена, вы можете получить свой User class implement IPrincipal.

+0

Есть ли способ реализовать это: http://schotime.net/ blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/в мой сервисный уровень и использовать его из моего приложения asp.net mvc? Или пользовательский класс auth должен быть в том же проекте, что и приложение mvc? –

+0

Лучший способ использования сервисов или служб доменной модели из уровня Application/UI - использовать Injection Dependency (DI). Однако вы не можете внедрить сервис в атрибут, потому что он статически подключен. Тем не менее, вы можете глобально настроить ASP.NET MVC FilterAttributes с помощью DI. Вот пример, показывающий, как это сделать для HandleError: http://blog.ploeh.dk/2009/12/01/GlobalErrorHandlingInASPNETMVC.aspx –

+0

@MarkSeemann Почему я должен установить Thread.CurrentPrincipal после аутентификации пользователя? – Rookian

Смежные вопросы