我可以创建没有成员资格的ASP.NET用户吗?

时间:2012-04-07 17:30:43

标签: asp.net-mvc oauth asp.net-membership

我正在实施OAuth(我的第一次),我花了一段时间来研究如何使用ASP.NET MVC实现它(我不想使用OpenID)

我已定居(现在):

  • 获取OAuth accessToken
  • 检索Facebook(或谷歌等)用户ID
  • 检查db表中是否有此ID - (专门为OAuth注册创建的表)
  • 如果找到ID我想使用FormsAuth.SetAuthCookie()和
  • 为他们分配一个角色来访问网站的会员区域 - 但此时没有进行会员注册,所以没有角色因此无法访问网站的会员区域,这是我的问题

我玩弄了用户名= Fb.ID&编程的创建asp用户的想法。密码=随机(存储在上面提到的OAuth db表中)&以编程方式记录它们,但

A :看起来真的很啰嗦

B :像这样存储此密码似乎是错误的

我应该创建一个用户&用prlogically记录它们?

使用asp.net会员资格时是否有最佳做法?的OAuth?

2 个答案:

答案 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获取的额外配置文件数据。

当您提供替代登录方法时,例如对于管理员,请确保只有该管理员角色的用户才能通过备用登录方法登录。