我希望允许我的用户使用我的登录系统、FB Connect 或 Google Login 登录我的网站。我不想仅使用大型库(如 dotnetOpenAuth)来实现这两个选项 - 那么我应该如何实现这一点?
其他问题 - 我应该如何将 FB/Google 用户绑定到我的内部用户系统?我想允许使用它们登录(例如,我可以使用 FB 登录,然后使用 Google 登录,并且仍然绑定到同一用户)。
我正在使用 ASP.NET MVC 2
Thanks!
如果你不喜欢使用像这样的大库DotnetOpenAuth http://www.dotnetopenauth.net/您必须手动实施 OpenID 协议。这是规格 http://openid.net/developers/specs/你需要遵守。
话虽这么说,我建议您使用现有的库。DotnetOpenAuth
是 .NET 的参考库。
还有一点要注意的是:OpenId 和 OAuth 是不同的标准,旨在实现不同的目标:OpenId
用于身份验证OAuth
是为了授权。
至于识别可以从不同 OpenID 提供商登录的同一用户,您将需要一些东西来识别他们。例如,使用 DotnetOpenAuth,在向 OpenID 提供商创建身份验证请求时,您可能需要全名和电子邮件:
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
});
}
并使用此信息来识别内部数据库中的用户。
所以这是我的想法:
- 您创建一个内部数据库表,其中将包含您的站点用户。一开始这个表是空的。
- 用户来到您的网站并希望使用它。他尚未经过身份验证,因此您向他索要凭据。您让他能够选择他的 OpenId 提供商并准备身份验证请求并将他重定向到他的提供商进行身份验证。
- 用户通过其提供商进行身份验证并被重定向回您的网站。此时,您知道他声称的身份,并将该用户添加到您的用户表中。现在,用户可以随时返回您的网站并登录。
- 您可以为经过身份验证的用户提供添加另一个 OpenId 提供程序的可能性(就像 StackOverflow 所做的那样)。重要的想法是,用户需要已经通过您网站的身份验证才能执行此操作。因此,他可以输入替代的 OpenId 提供商并重定向到该提供商进行身份验证。一旦他通过身份验证,他就会被重定向回您的站点,并且因为他已经通过您的站点的身份验证,您可以将他的替代 OpenId 提供商添加到用户表中。
- 将处理来自 OpenId 提供程序的重定向的控制器操作应该检查用户是否已经通过您的站点的身份验证,如果没有使用
FormsAuthentication.GetAuthCookie
并传递所声称的身份。如果您的内部用户表中不存在所声明的身份,您需要添加它。如果用户已经通过您网站的身份验证,则意味着他正在向其个人资料中添加替代 OpenId 提供商,因此您需要更新用户表并向其中添加新提供商。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)