我目前正在开发一个项目,该项目将拥有适用于移动设备的网站和应用。我需要一种方法让用户登录我的网站查看某些区域。我知道我需要构建一个WCF RESTful服务,但我仍然坚持如何继续创建用户。我原本打算使用内置的.NET成员资格,但是我读的越多,如果我有很多用户就会听到最糟糕的情况。然后,我想要构建一个新的提供程序,它将为我提供内置.NET成员资格的所有功能,但我可以更好地控制所有内容。最后一个想法是建立一个完整的会员系统,但我担心我会失去内置的.NET Membership系统的功能。我基本上只是在找人指出正确的方向并解释原因。
现在我认为处理这个问题的最佳方法是建立一个完整的会员制度。我想我将通过我的网站将调用的后端的WCF和RESTful服务调用来访问我的数据。我现在还不知道可以通过WCF验证用户的用户名和密码。
感谢您的所有意见。
答案 0 :(得分:3)
我们在几个项目中做了这件事,这里是我们如何完成它的总结。请记住,这只是一种方法,我们也成功地编写了自己的会员提供商。
我们有3个主要项目:
我们使用内置的.NET成员资格提供程序,因为它是开箱即用的。这为我们的MVC和API项目提供了基本注册,密码更改,角色管理以及基于简单控制器的角色权限和访问控制。
默认会员提供者将使用自己的表来存储用户数据。
然后,我们使用外键创建我们自己的用户和配置文件表和数据结构,返回用户的.NET membershipId。这使我们能够灵活地完成我们需要对用户配置文件执行的所有特定应用程序,同时仍然允许我们访问默认提供程序。
在MVC项目中直接进行身份验证,您现在可以使用.NET Membership方法通过用户名和密码进行身份验证:
if(Membership.ValidateUser(username,password)){
FormsAuthentication.SetAuthCookie(username,password);
}
对于WCF项目,您没有使用FormsAuthentication,但您仍然可以使用默认成员资格提供程序来验证用户凭据。
如何处理身份验证取决于您和您的项目,但是对于基本需求,我们通常使用验证后由WCF服务返回的身份验证令牌。然后,每个WCF请求都包含此令牌,以证明它们已经过验证,通常在请求标头中。
对于WCF,我们在向服务器提交凭据时对64位用户名和密码进行编码,如果成功,我们会传回授权令牌:
string decoded = System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(Authmodel));
//convert your string into your authentication model here then
if(Membership.ValidateUser(model.user,model.pass))
{
//return new authentication token
}
我们还在注册期间添加了额外的逻辑,在此时构建我们的专有用户和配置文件表,这在数据项目中处理,以便WCF和MVC都可以访问它。
此外,数据项目处理我们的用户和配置文件表与.NET成员资格提供程序表之间的链接,以便两个应用程序都可以访问这些信息。
我意识到这一切都很模糊,但也许它可以帮助您考虑以统一方式处理身份验证的一个选项。如果您对特定部分有疑问,请告诉我,我希望这些信息对您有用。