1

我目前正在开展一个项目,该项目将拥有一个用于移动设备的网站和应用程序。我将需要一种方法让用户登录到我的网站以查看某些区域。我知道我将需要构建一个 WCF RESTful 服务,但我被困在如何继续创建用户上。我最初打算使用内置的 .NET Membership,但我读的越多,如果我有很多用户,它听起来就越糟糕。然后我正在考虑构建一个新的提供程序,它可以为我提供内置 .NET 成员资格的所有功能,但我可以更好地控制一切。最后一个想法是构建一个完整的会员系统,但我担心我会失去内置 .NET 会员系统的功能。我基本上只是在寻找有人指出我正确的方向并解释原因。

现在我认为处理这个问题的最好方法是建立一个完整的会员系统。我想我将通过我的网站将调用的后端的 WCF 以及 RESTful 服务将调用我的数据访问。我现在不知道可以通过 WCF 对用户用户名和密码进行身份验证的方法。

感谢您的输入。

4

1 回答 1

3

我们在我们的几个项目中都这样做了,这里是我们如何完成它的总结。请记住,这只是一种方法,我们也成功地编写了自己的会员提供程序。

我们有3个主要项目:

  1. Data.project - 类库
  2. WebApp.project - MVC 应用程序
  3. API.project - WCF 服务

我们使用内置的 .NET 成员资格提供程序,因为它开箱即用。这为我们提供了 MVC 和 API 项目中的基本注册、密码更改、角色管理以及基于简单控制器的角色权限和访问控制。

默认成员资格提供程序将使用其自己的表来存储用户数据。

然后,我们创建自己的用户和配置文件表和数据结构,外键返回用户的 .NET 会员身份。这使我们能够灵活地执行我们需要对用户配置文件执行的所有应用程序特定的事情,同时仍然允许我们访问默认提供程序。

身份验证在 MVC 项目中很简单,您现在可以使用 .NET Membership 方法通过用户名和密码进行身份验证:

if(Membership.ValidateUser(username,password)){
    FormsAuthentication.SetAuthCookie(username,password);
}

对于 WCF 项目,您没有 FormsAuthentication 的奢侈,但您仍然可以使用默认成员资格提供程序来验证用户凭据。

之后如何处理身份验证取决于您和您的项目,但对于基本需求,我们通常使用 WCF 服务在验证后返回的身份验证令牌。然后,此令牌包含在每个 WCF 请求中,以证明它们已经过验证,通常在请求标头中。

对于 WCF,我们在将凭据提交到服务器时对用户名和密码进行 base 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 成员资格提供程序表之间的链接,因此两个应用程序都可以访问这些信息。

我意识到这一切都非常模糊,但也许它可以帮助您想到一种以统一方式处理身份验证的选项。如果您对特定部分有疑问,请告诉我,我希望这些信息对您有用。

于 2012-09-15T19:21:28.857 回答