我们在我们的几个项目中都这样做了,这里是我们如何完成它的总结。请记住,这只是一种方法,我们也成功地编写了自己的会员提供程序。
我们有3个主要项目:
- Data.project - 类库
- WebApp.project - MVC 应用程序
- 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 成员资格提供程序表之间的链接,因此两个应用程序都可以访问这些信息。
我意识到这一切都非常模糊,但也许它可以帮助您想到一种以统一方式处理身份验证的选项。如果您对特定部分有疑问,请告诉我,我希望这些信息对您有用。