单个控制器的简单身份验证

时间:2012-11-29 13:31:41

标签: asp.net-mvc asp.net-mvc-3

我需要用户登录才能查看单个控制器内的所有操作。我不需要保持他们的身份,因此他们将使用共享登录名和密码。

换句话说,我有一些用户组,他们需要访问网站上的某个区域。我想给他们所有相同的登录名和密码(比如'username'和'passw0rd')。

这个简单的身份验证应该只在该控制器内部工作,不应该以任何方式影响网站的其他部分。请记住,我们为网站的管理区域设置了auth工作模式,上面描述的用户组不应该看到管理员登录页面,因为它们需要在控制器内进行沙盒化。

实现它的最佳方法是什么?也许我在想错误的方向并且有一些不同的解决方案?

2 个答案:

答案 0 :(得分:1)

当您在应用中使用表单auth时,只需为所有新用户创建另一个用户帐户,并创建两个角色,即 Admin Shared Users

现在向控制器添加Authorize属性:

[Authorize(Roles="Shared Users")

如果还没有,请将 Admin 角色添加到您的管理区域:

[Authorize(Roles="Admin")

答案 1 :(得分:1)

您可以将凭据存储在web.config文件中。请注意,您也可以将凭据存储为web.config中的加密。

<authentication mode="Forms">
  <forms timeout="30" loginUrl="~/Admin/Login">
    <credentials passwordFormat="Clear">
      <user name="user" password="password"/>
    </credentials>
  </forms>
</authentication>

您可以使用FormsAuthentication.Authenticate方法对用户进行身份验证。

对于前。

[HttpPost]
public ActionResult Login(string name, string password, string returnUrl)
{
   if (FormsAuthentication.Authenticate(name, password))
   {
       FormsAuthentication.SetAuthCookie(name, false);
       return Redirect(!string.IsNullOrEmpty(returnUrl) ? returnUrl : Url.Action("Manage", "Admin"));
   }
   else
       return View();
}

您可以使用内置的Authorize属性标记需要授权其操作的控制器。