使用.NET Connect中的FB Connect / Google OAuth登录

时间:2011-01-16 15:04:16

标签: asp.net-mvc openid oauth-2.0

我想允许我的用户使用我的登录系统或FB Connect或Google Login登录我的网站。我不想只为这两个选项使用大型库(如dotnetOpenAuth) - 那么我该如何实现呢?

其他问题 - 我应该如何将FB / Google用户绑定到我的内部用户系统?我想允许使用它们登录(我可以使用FB登录,然后使用Google登录,并且仍然绑定到同一个用户)。

我正在使用ASP.NET MVC 2

谢谢!

1 个答案:

答案 0 :(得分:15)

如果您不喜欢使用像DotnetOpenAuth这样的大型库,则必须手动实施OpenID协议。 Here are the specifications你需要遵守。

话虽如此,我建议您使用现有的库。 DotnetOpenAuth是.NET的参考库。

还有一个小小的评论:OpenId和OAuth是不同的标准,旨在实现不同的目标:OpenId用于身份验证,OAuth用于授权。

就识别可能从不同OpenID提供商登录的同一用户而言,您需要一些东西来识别它们。例如,在向OpenID提供程序创建身份验证请求时使用DotnetOpenAuth,您可能需要FullName和Email:

using (var openid = new OpenIdRelyingParty())
{
    var request = openid.CreateRequest(Identifier.Parse(openid_identifier));

    request.AddExtension(new ClaimsRequest
    {
        BirthDate = DemandLevel.NoRequest,
        Email = DemandLevel.Require,
        FullName = DemandLevel.Require
    });
}

并使用此信息来识别内部数据库中的用户。

所以这就是这个想法:

  1. 您创建一个内部数据库表,其中包含您的站点用户。一开始这个表是空的。
  2. 用户访问您的网站并希望使用它。他尚未通过身份验证,因此您要求他提供证书。您可以让他选择OpenId提供程序并准备身份验证请求并将其重定向到其提供程序进行身份验证。
  3. 用户通过其提供商进行身份验证,并重定向回您的网站。此时您知道他声称的身份,并将用户添加到您的用户表中。现在,用户可以随时返回您的站点并登录。
  4. 您可以为经过身份验证的用户提供添加另一个OpenId提供程序的可能性(就像StackOverflow一样)。重要的想法是,用户需要已经过对您网站的身份验证才能执行此操作。因此,他可以进入他的替代OpenId提供程序并重定向到此提供程序进行身份验证。一旦他进行身份验证,他就会被重定向回您的网站,并且因为他已经对您的网站进行了身份验证,您可以向用户表添加他的替代OpenId提供程序。
  5. 将处理来自OpenId提供程序的重定向的控制器操作应检查用户是否已经对您的站点进行了身份验证,如果没有使用FormsAuthentication.GetAuthCookie对其进行身份验证并传递声明的身份。如果您的内部用户表中不存在声明的身份,则需要添加该身份。如果用户已经对您的站点进行了身份验证,则意味着他正在为其个人资料添加备用OpenId提供程序,因此您将更新用户表并向其添加新提供程序。