Pour être honnête, réaliser ce que je voulais était un processus assez simple. Je n'ai pas encore implémenté le AuthorizationService mais cela suivra un modèle similaire.
Mon service d'authentification est assez simple:
public interface IAuthenticationService
{
bool IsValidLogin(string username, string password);
}
Il y aura une méthode CreateUser mais je n'ai pas encore mis en œuvre ce.
Création d'un service d'authentification en utilisant le fournisseur d'appartenances standard est un travail simple:
public class AspNetAuthenticationService : IAuthenticationService
{
public bool IsValidLogin(string username, string password)
{
return Membership.ValidateUser(username, password);
}
}
Si je veux échanger le SqlMembershipProvider par défaut avec mon propre alors j'ai juste besoin de changer web.config. Afin de prendre en charge différents types d'authentification (peut-être des formulaires auth et openID), je peux simplement créer une action de contrôleur pour chacun et appeler l'implémentation IAuthenticationService.ValidateUser appropriée avant de définir un cookie d'authentification.
Le processus d'authentification pour identifier l'utilisateur. Afin d'obtenir le "client" j'utilise un PersonalizationService. L'interface de ce nouveau est assez simple:
public interface IPersonalizationService {
Customer GetCustomer(string username);
}
Ce retourne mon client (avec des adresses, des commandes passées - les choses que nous soucions vraiment). La méthode GetCustomer va créer un objet client s'il n'existe pas avec le nom d'utilisateur passé. Donc, si vous utilisez des formulaires standard auth, un client sera créé de toute façon lors de l'inscription. Si vous utilisez quelque chose comme OpenID, la première fois qu'ils se connectent à un objet client sera créé et lié à leur nom d'utilisateur OpenID (d'où la raison de séparer ce qu'est un "utilisateur" authentifié d'un "client".
Ce processus fonctionne également bien pour le paiement anonyme car je peux créer un objet client en mémoire pour les clients "invités", et finalement le conserver dans la base de données s'ils font un achat. Dans ce cas, je n'ai pas d'utilisateur (car ils ne se sont pas authentifiés) mais j'ai un client.
Je suis assez content de cette implémentation. Je pense que je vais lancer mon propre fournisseur d'appartenance (puisque ce n'est pas vraiment difficile) et je voudrais utiliser le modèle de référentiel pour l'accès aux données. Intéressé d'entendre des opinions/suggestions sur cette approche.
Certaines ressources utilisées: Je
http://noahblu.wordpress.com/2009/02/19/custom-membershipprovider-using-repository-dependency-injection-pattern-magic/
http://davidhayden.com/blog/dave/archive/2007/10/11/CreateCustomMembershipProviderASPNETWebsiteSecurity.aspx
http://pbdj.sys-con.com/node/837990/mobile
http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx
Merci pour la réponse. Pardonnez mon ignorance mais je ne vois pas comment RIA va aider. Si j'utilise plusieurs clients, par exemple mvc et silverlight je peux voir comment cela serait utile. Cependant, comme il est construit en plus de l'appartenance standard à ASP.NET, il semble que cela change la façon dont le service d'authentification est exposé à mon application, mais pas comment cela fonctionne réellement, ou comment il interagit avec mon modèle. Merci de votre aide. –