使用Asp.Net MVC混合认证(Forms,FB connect,twitter,openId)

问题描述:

我正在创建一个新网站,我希望用户能够使用多种方式登录,基本上用户应该可以在我的网站上创建新用户或使用Facebook连接或使用Twitter帐户登录该网站。使用Asp.Net MVC混合认证(Forms,FB connect,twitter,openId)

我已经看过使用这些方法之一的几个教程,我想知道的是您认为最好的方法是什么?

到目前为止,我认为最好的方法是创建一个自定义的身份验证模型(类似于现有授权类的子类型)。

这是最好的方法吗? 你能指点我一个尝试类似的人的好例子吗?

非常感谢

我的博客上讲述最近类似的东西......这是我花了

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; 
     } 
    } 
} 

我会根据自己怎么授权方案为每一个类型的登录不同的登录方法,该方法工作。

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); 
    } 
} 

顺便说一句,这两个班在顶部代表我的实体框架波苏斯 这里的关键是验证表是从用户表分开。它允许一个用户拥有多种登录方式。希望这可以帮助你顺利进行。

+0

快速提问;这些方法是针对OpenID的,而不是Twitter使用的开放认证。我们可以执行相同的程序,无论它是OpenID还是Open Auth? – FelixMM 2011-03-19 15:04:01

+0

是的,它的POCO类是相当通用的。您可能需要添加一个或两个字段,但我怀疑这是因为我在Twitter上的经验有限,因此您只需存储其验证令牌,该验证令牌将存储在“LoginId”字段中。然后,你可以在不同的登录类型上调用不同的方法。所以,而不是OpenIdUserLogin你会叫一个Twitter的。如果我不太忙,我会在博客上添加一篇关于它的新文章,如果您遇到困难:) – Buildstarted 2011-03-19 15:34:12

+0

感谢您的回复。我以非常相似的方式实现了OpenID登录,就像你在这里回答,现在我要去oAuth。我目前正在关注这两个链接:http://bit.ly/csBrgM和http://bit.ly/i8GwDh还没有测试过,所以它可能会非常好,或者真的很糟糕,但是再次感谢为你的回应:) – FelixMM 2011-03-19 16:44:03

如果您愿意每月花费几美元,Windows Azure Access Control Service作为ASP.NET的嵌入式成员资格提供程序提供此功能。这也是新的Windows 8 SSO凭证流程的基础。

但请注意,Twitter尚未支持,因为Access Control不支持OAuth 1.0。