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

Rom*_*man 5 openid asp.net-mvc oauth-2.0

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

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

我正在使用ASP.NET MVC 2

谢谢!

Dar*_*rov 15

如果您不喜欢使用像DotnetOpenAuth这样的大型库,则必须手动实现OpenID协议.以下是您需要遵守的规范.

话虽如此,我建议您使用现有的库.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
    });
}
Run Code Online (Sandbox Code Playgroud)

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

所以这就是这个想法:

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