2010-01-19 4 views
2

J'ai une application avec 3 "couches", d'abord "datalayer", 2ème "businesslayer" et 3ème est le site asp.net mvc. Et j'essaie d'ajouter l'authentification par formulaires de la bonne manière. Dois-je en quelque sorte le configurer pour utiliser la couche de gestion? Cela obtient/ajoute/met à jour l'utilisateur qui fait partie de l'authentification à être?Authentification personnalisée avec la couche de service?

Et dans quel projet dois-je ajouter la validation de l'utilisateur à?

/M

+0

Salut @Lasse Comment avez-vous fini par résoudre cela. –

+0

Tout en un projet mvc pour le moment. Mais http://www.pluralsight.com/training/Courses/TableOfContents/getting-started-aspdotnet-mvcservice-stack-bootstrap pourrait être quelque chose à regarder –

Répondre

7

L'authentification est quelque chose qui devrait toujours se produire à la limite d'application, parce que les différentes applications utilisant le même modèle de domaine peuvent avoir des besoins d'authentification. Si jamais vous décidez d'exposer votre modèle de domaine comme, par exemple, un service Web, l'authentification par formulaires ne sera probablement pas le meilleur mécanisme d'authentification.

Dans ASP.NET MVC, vous pouvez facilement implémenter l'authentification par nom d'utilisateur/mot de passe en utilisant le modèle de projet par défaut de Visual Studio, mais une fois l'utilisateur authentifié, vous devez définir Thread.CurrentPrincipal.

En général, IPrincipal est la base standard pour la modélisation du contexte utilisateur dans .NET. Par exemple, HttpContext.User est un IPrincipal. Dans vos modules Modèle de domaine et Accès aux données, vous pouvez utiliser Thread.CurrentPrincipal pour implémenter la logique d'autorisation. Cela vous permet de varier l'authentification et l'autorisation indépendamment l'une de l'autre.

Si vous avez besoin de travailler avec un concept utilisateur plus riche dans votre modèle de domaine, vous pouvez avoir votre User class implement IPrincipal.

+0

Y at-il une façon de mettre en œuvre ceci: http://schotime.net/ blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/dans ma couche de service et l'utiliser depuis mon application asp.net mvc? Ou la classe d'authentification personnalisée doit-elle être dans le même projet que l'application mvc? –

+0

La meilleure façon d'utiliser les services de couche de service ou de modèle de domaine à partir de la couche Application/UI consiste à utiliser l'injection de dépendances (DI, Dependency Injection). Cependant, vous ne pouvez pas réellement injecter un service dans un attribut parce qu'il est connecté de manière statique. Toutefois, vous pouvez configurer globalement ASP.NET MVC FilterAttributes avec DI. Voici un exemple montrant comment le faire pour HandleError: http://blog.ploeh.dk/2009/12/01/GlobalErrorHandlingInASPNETMVC.aspx –

+0

@MarkSeemann Pourquoi devrais-je définir Thread.CurrentPrincipal une fois que l'utilisateur est authentifié? – Rookian

Questions connexes