c# - 网站和移动应用程序的成员(member)系统

标签 c# android .net wcf asp.net-membership

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

现在我认为处理这个问题的最好方法是建立一个完整的成员(member)系统。我想我将通过后端的 WCF 访问我的数据,我的网站将调用它,RESTful 服务将调用它。我现在不知道有什么方法可以通过 WCF 验证用户的用户名和密码。

感谢您的所有意见。

最佳答案

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

我们有 3 个主要项目:

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

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

默认的成员(member)提供者将使用自己的表来存储用户数据。

然后,我们创建自己的用户和个人资料表以及数据结构,并使用外键返回用户的 .NET membershipId。这使我们能够灵活地执行我们需要对用户配置文件执行的所有特定于应用程序的操作,同时仍然允许我们访问默认提供程序。

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

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

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

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

对于 WCF,我们在向服务器提交凭据时对用户名和密码进行 base 64 编码,然后如果成功,我们将返回身份验证 token :

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 成员(member)提供程序表之间的链接,以便两个应用程序都可以访问信息。

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

关于c# - 网站和移动应用程序的成员(member)系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440107/

相关文章:

c# - 如何将包含--data-urlencode 的curl 转换为HttpClient 调用?

c# - 为什么更改浏览器时日期格式会自行更改?

android - 重新启动应用程序时,realm-java 数据丢失

java - 用户输入和计时器(java android应用程序)

android - 当我添加 google maps api 时,.dex 文件超过 64k

c# - Word 自动化 - 禁用警报

c# - 当引用的程序集同时引用 mscorlib 2.0.5.0 和 4.0.0.0 时如何让 roslyn 进行编译

c# - 在 Crystal 报表交叉表报表中添加序号

c# - 在 C# 中实现 Photoshop 滤镜

c# - 以不同用户身份从 .NET 服务启动 .NET 应用程序时出现权限问题?