所以我使用c#,MVC和sqlexpress在.NET中构建Web应用程序。我希望用户能够登录,并根据他们所属的组,查看UI的某些部分。
我已经为我的数据库中的组和用户创建了表,使用ADO.NET向导从这些表创建模型来创建模型。
我添加了一个控制器,它有检查用户是否存在的方法,以及他的密码是否正确。我的问题是如何以“©correct”的方式存储用户通过身份验证的信息?
目前,我只是在System.Web.Mvc.Controller
提供的会话变量中创建了一个新对象。我创建了一个标记对象Session["Authenticated"] = true
并创建了另一个对象,其中包含Session["User"]
的信息(用户名,组关联等...)。
我偶然发现了描述实现您自己的成员资格提供程序(here和here)的文章,但我觉得我需要打破现有的密码安全和帐户控制类才能实现他们在自定义会员提供者中。
是否需要自定义成员资格提供程序实现,或者会话中保存的数据是否足够好?
答案 0 :(得分:0)
如果您不想遵循成员资格提供者路线,更好的方法是查看表单身份验证(http://msdn.microsoft.com/en-us/library/xdt4thhy(v=vs.100).aspx)。
答案 1 :(得分:0)
首先保存关于用户的角色和权限并编写自定义操作过滤器,其中检查如果用户有权访问控制器方法,如果是,则继续执行,如果没有则生成异常和响应消息。
当用户登录然后获取当前用户角色和权限并将其保存在自定义过滤器中的会话或按钮和选项卡上时,如果用户有权限,则会话用户是否有权限,然后显示选项卡,否则将其隐藏。 这是实例
的链接 Action Filters
Filters Example Code Project
答案 2 :(得分:0)
在ASP.NET MVC项目中实现身份验证和授权的最简单方法之一是使用inbuild Forms身份验证模块。当您创建一个新的ASP.NET MVC项目时,它已经包含了开始使用Forms Auth所需的所有内容。
它所做的就是创建某些表(5),您无需担心或在代码中跟踪它们。一切都很简单。您始终可以将ASP.NET MVC成员资格提供程序创建的用户映射到您自己的UserMaster
表。
接下来,您所要做的就是标记您的ActionMethod或您的Controller,或者在global.asax中标记[Authorize]
属性,您就已经完成了设置。
代码将简单如下:
登录:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password,
persistCookie: model.RememberMe))
{
///rest of the logic
}
}
下面还有一些用户功能,它们会派上用场:
if(WebSecurity.UserExists(username)){ /// ur logic }
//or
WebSecurity.CreateUserAndAccount(username, password);
//or
System.Web.Security.Roles.AddUserToRole(username, UserRole);
并猜测是什么,你不必担心在某些HttpModule
中设置一些标志或首先总是执行函数以查看会话用户是否存在,[Authorize]
属性负责处理
使用自定义UserMaster
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password,
persistCookie: model.RememberMe))
{
try
{
try
{
//below is my custom method IsValidUser with my own logic for
// valid user
MembershipCore.IsValidUser(model.UserName);
if (MembershipCore.isFirstTimeLogin(model.UserName))
{
//Show License Screen in a window
return RedirectToAction("License");
}
//my custom method setting custom Session variables
MembershipCore.SetLoggedInUser(model.UserName);
}
}
}