我目前正在从事一个项目,将有一个网站和移动设备的应用程序。我需要一种方式,让用户登录到我的网站,以查看某些领域。我知道我将需要建立一个WCF服务,但我被困在如何继续创建用户。我原本打算使用内置的.NET会员资格,但我读得越多,如果我有很多用户,这听起来就越糟糕。然后,我在考虑建立一个新的提供者,它将为我提供内置.NET会员的所有功能,但我将对所有事情有更多的控制。最后一个想法是建立一个完整的会员系统,但我担心我会失去内置的.NET会员系统的功能。我基本上只是在寻找一个人给我指出正确的方向,并解释为什么。
现在我认为处理这个问题的最好方法是建立一个完整的会员系统。我在想,我将通过后端的WCF访问我的数据,我的网站会调用它,RESTful服务也会调用它。我现在还不知道有什么方法可以通过WCF验证用户的用户名和密码。
感谢您的所有投入。
发布于 2012-09-16 03:21:29
我们在我们的几个项目中都做了这件事,下面是我们如何完成它的总结。请记住,这只是一种方法,我们也已经成功地编写了自己的成员提供程序。
我们有3个主要项目:
服务类library
我们使用内置的.NET成员资格提供程序,因为它开箱即用。这为我们提供了基本的注册、密码更改、角色管理,以及在我们的MVC和API项目中基于简单控制器的角色权限和访问控制。
默认成员资格提供程序将使用其自己的表来存储用户数据。
然后,我们创建自己的用户和配置文件表以及数据结构,其中包含一个指向用户的.NET membershipId的外键。这使我们可以灵活地对用户配置文件执行所有应用程序特定的操作,同时仍然允许我们访问默认提供程序。
在MVC项目中,身份验证非常简单,您现在可以使用.NET成员方法通过用户名和密码进行身份验证:
if(Membership.ValidateUser(username,password)){
FormsAuthentication.SetAuthCookie(username,password);
}对于WCF项目,您没有FormsAuthentication的特权,但是您仍然可以使用默认的成员资格提供程序来验证用户凭据。
之后如何处理身份验证取决于您和您的项目,但对于基本需求,我们通常使用验证后由WCF服务返回的身份验证令牌。然后,此令牌包含在每个WCF请求中,以证明它们已通过验证,通常位于请求标头中。
对于WCF,我们在向服务器提交凭据时对用户名和密码进行64位编码,如果成功,则传递回auth令牌:
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都可以访问它。
此外,数据项目处理user表和profile表以及.NET Membership provider表之间的链接,以便这两个应用程序都可以访问信息。
我知道这一切都很模糊,但也许它可以帮助您想出一种以统一方式处理身份验证的选项。如果你对特定的部分有问题,请告诉我,我希望这个信息对你有用。
https://stackoverflow.com/questions/12440107
复制相似问题