3

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

我已经解决了(目前):

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

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

A : 好像真的很啰嗦

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

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

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

4

2 回答 2

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) });
    }
}
于 2012-04-08T09:14:14.773 回答
1

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

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

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

于 2012-04-08T07:08:14.457 回答