【问题标题】:Can I create an ASP.NET User without membership?我可以创建没有成员资格的 ASP.NET 用户吗?
【发布时间】:2012-04-07 17:30:43
【问题描述】:

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

我已经(暂时)与:

  • 获取 OAuth accessToken
  • 检索 Facebook(或 google 等)用户 ID
  • 正在检查该 ID 的 db 表 -(专门为 OAuth 注册创建的表)
  • 如果找到 ID 我想使用 FormsAuth.SetAuthCookie() 并且,
  • 为他们分配一个角色以访问网站的会员区域 - 但此时尚未进行会员注册,因此没有角色,因此无法访问网站的会员区域,这是我的问题。李>

我玩弄了使用 username=Fb.ID 和 Password=Random(存储在上面提到的 OAuth db 表中)以编程方式创建 asp 用户并以编程方式登录的想法,但是

A:好像很啰嗦

B:这样存储密码似乎不对

我应该创建一个用户并以实用的方式登录吗?

在使用 asp.net 成员资格和 OAuth 时是否有最佳实践?

【问题讨论】:

  • 我想同时接受 Сергій 和 Saintedlama 作为答案,它们都非常有帮助,我会选择 Сергій 因为有一些不错的 GenericPrincipal 正在发生。

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


【解决方案1】:

获取 FB Id 或 OpenId 后,您需要像这样保存 auth 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) });
    }
}

【讨论】:

  • 这是否意味着我们必须为每个 AuthRequest 查询数据库?这在 Db 上看起来真的很贵。
  • 在我的解决方案中 - 是的。但是你可以使用缓存。
  • 感谢@Сергій 你让我看到了 GeneralPrincipal 我现在明白了很多,我很好奇 ASP.NET 是否必须转到会员数据库来分配 GeneralPrincipal 或者他们是否使用缓存。
【解决方案2】:

当通过 LiveId 实现用户身份验证时(从您的问题的角度来看,这与 OAuth 登录非常相似)我更喜欢使用具有 emptygeneric 的成员资格提供程序来创建用户strong>(在 AppSettings 中配置)密码。我可以使用 FormsAuthentication.Authenticate 方法,并设置身份验证 cookie。

通过这种方法,我可以使用 RoleProvider 来存储额外的角色,并使用 ProfileProvider 来存储我无法通过 LiveId 获得的额外配置文件数据。

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

【讨论】:

  • 我想我只是想确认创建用户并将他们登录是可以的。我喜欢这种方法,因为我可以保证登录安全,甚至可以保留它以备将来使用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多