使用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);
}
}
顺便说一句,这两个班在顶部代表我的实体框架波苏斯 这里的关键是验证表是从用户表分开。它允许一个用户拥有多种登录方式。希望这可以帮助你顺利进行。
答
如果您愿意每月花费几美元,Windows Azure Access Control Service作为ASP.NET的嵌入式成员资格提供程序提供此功能。这也是新的Windows 8 SSO凭证流程的基础。
但请注意,Twitter尚未支持,因为Access Control不支持OAuth 1.0。
快速提问;这些方法是针对OpenID的,而不是Twitter使用的开放认证。我们可以执行相同的程序,无论它是OpenID还是Open Auth? – FelixMM 2011-03-19 15:04:01
是的,它的POCO类是相当通用的。您可能需要添加一个或两个字段,但我怀疑这是因为我在Twitter上的经验有限,因此您只需存储其验证令牌,该验证令牌将存储在“LoginId”字段中。然后,你可以在不同的登录类型上调用不同的方法。所以,而不是OpenIdUserLogin你会叫一个Twitter的。如果我不太忙,我会在博客上添加一篇关于它的新文章,如果您遇到困难:) – Buildstarted 2011-03-19 15:34:12
感谢您的回复。我以非常相似的方式实现了OpenID登录,就像你在这里回答,现在我要去oAuth。我目前正在关注这两个链接:http://bit.ly/csBrgM和http://bit.ly/i8GwDh还没有测试过,所以它可能会非常好,或者真的很糟糕,但是再次感谢为你的回应:) – FelixMM 2011-03-19 16:44:03