2010-09-11 5 views
8

Je crée un nouveau site et je souhaite que les utilisateurs puissent utiliser plusieurs façons de se connecter, en principe les utilisateurs doivent pouvoir pour créer un nouvel utilisateur sur mon site OU utiliser Facebook se connecter OU utiliser le compte de Twitter pour se connecter sur le site.Utilisation de l'authentification mixte avec Asp.Net MVC (Formulaires, FB connect, twitter, openId)

J'ai vu plusieurs tutoriels sur l'utilisation de l'une de ces méthodes, ce que je veux savoir, c'est quelle est la meilleure approche pour le faire? Jusqu'à présent, je pense que le meilleur moyen serait de créer un modèle d'authentification personnalisé (quelque chose comme le sous-typage des classes d'autorisation existantes).

Est-ce la meilleure approche? Pouvez-vous me montrer un bon exemple de quelqu'un qui essaie quelque chose de similaire?

Merci beaucoup

Répondre

8

Je blogué sur quelque chose de similaire récemment ... Voici l'approche que je pris

public class User { 
    public int UserID { get; set; } 
    public string Name { get; set; } 
    public string Page { get; set; } 

    public virtual Authentication Authentication { get; set; } 
} 

public class Authentication { 
    public int Id { get; set; } 
    public string LoginId { get; set; } 
    public string Provider { get; set; } 
    public string Password { get; set; } 

    public virtual User User { get; set; } 
} 

//login methods 
User StandardUserLogin(string username) { 
    IDataContext db = new DataContext(); 
    var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username); 
    if (user != null) { 
     if (user.Authentication.Password == password) { 
      SetAuthenticationTicket(user); 
      return user; 
     } 
    } 
} 

Je voudrais créer une méthode de connexion différente pour chaque type de connexion en fonction de leurs régimes d'autorisation travail.

User OpenIdUserLogin(string username) { 
    IDataContext db = new DataContext(); 
    var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username && u.Authentication.Provider == "openid"); 
    if (user == null) { 
     //create new openid user 
    } 

    if (user.Authentication.LoginId == id) { 
     SetAuthenticationTicket(user); 
     return user; 
     } 
} 

//openid's authentication method 
[ValidateInput(false)] 
public ActionResult Authenticate(string returnUrl) { 
    IAuthenticationResponse response = OpenId.GetResponse(); 

    if (response == null) { 
     //make openid request here 
    } else { 
     var user = OpenIdUserLogin(response.ClaimedIdentifier); 
    } 
} 

BTW, les deux classes au sommet représentent mon Entity Framework Poços La clé ici est la table d'authentification qui est séparée de la table utilisateur. Il permet à un utilisateur d'avoir plusieurs méthodes de connexion. J'espère que cela vous aidera à vous mettre sur la bonne voie.

+0

Question rapide; ces méthodes sont pour OpenID, pas l'authentification ouverte qui est celle que Twitter utilise. Pouvons-nous faire la même procédure indépendamment de OpenID ou Open Auth? – FelixMM

+0

Ouais, ses classes POCO sont assez génériques. Vous devrez peut-être ajouter un champ ou deux, mais je doute que vu mon expérience limitée avec Twitter, il vous suffit de stocker leur jeton d'authentification, qui serait stocké dans le champ 'LoginId'. Ensuite, vous appelez simplement une méthode différente sur différents types de connexion. Donc, au lieu d'OpenIdUserLogin, vous appelez un Twitter. Si je ne suis pas trop occupé, je vais ajouter un nouveau message à mon blog à ce sujet si vous rencontrez des problèmes :) – Buildstarted

+0

Merci pour la réponse. J'ai implémenté la connexion OpenID d'une manière très similaire à ce que vous avez répondu ici et maintenant je vais pour oAuth. Je suis actuellement en train de suivre ces deux liens: http://bit.ly/csBrgM et http://bit.ly/i8GwDh Je n'ai pas encore testé, donc ça pourrait soit aller très bien, soit vraiment mal, mais encore merci pour ta réponse :) – FelixMM

1

Si vous êtes prêt à dépenser quelques dollars par mois, le Windows Azure Access Control Service offre cette fonctionnalité en tant que fournisseur d'appartenances drop-in pour ASP.NET. C'est également la base du nouveau flux d'informations d'identification Windows 8 SSO.

Notez que Twitter n'est pas encore pris en charge, car Access Control ne prend pas en charge OAuth 1.0.

Questions connexes