我正在实施OAuth(我的第一次),我花了一段时间来研究如何使用ASP.NET MVC实现它(我不想使用OpenID)
我已定居(现在):
我玩弄了用户名= Fb.ID&编程的创建asp用户的想法。密码=随机(存储在上面提到的OAuth db表中)&以编程方式记录它们,但
A :看起来真的很啰嗦
B :像这样存储此密码似乎是错误的
我应该创建一个用户&用prlogically记录它们?
使用asp.net会员资格时是否有最佳做法?的OAuth?
答案 0 :(得分:3)
一旦您检索了FB Id或OpenId,您需要像这样保存身份验证cookie:
HttpCookie httpCookie = FormsAuthentication.GetAuthCookie(openId, remember);
httpCookie.Expires = DateTime.Now.AddMonths(1);
HttpContext.Current.Response.SetCookie(httpCookie);
然后您可以在Global.asax中设置角色
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context.User != null && context.User.Identity.IsAuthenticated)
{
var user = new Dao<User>().GetByOpenId(context.User.Identity.Name);
context.User = new GenericPrincipal(context.User.Identity,
new[] { Enum.GetName(typeof(UserRole), user.Role) });
}
}
答案 1 :(得分:1)
通过LiveId实现用户身份验证时(从您的问题角度非常类似于OAuth登录)我更喜欢使用空或通用的成员资格提供程序创建用户strong>(在AppSettings中配置)密码。我可以使用FormsAuthentication.Authenticate方法,并设置auth cookie。
通过这种方法,我可以使用RoleProvider存储额外的角色,使用ProfileProvider来存储我无法通过LiveId获取的额外配置文件数据。
当您提供替代登录方法时,例如对于管理员,请确保只有该管理员角色的用户才能通过备用登录方法登录。