【问题标题】:MVC forms authentication without a database没有数据库的 MVC 表单身份验证
【发布时间】:2015-05-27 14:53:02
【问题描述】:

我有一个我继承的 MVC4 站点。在站点中,它使用用户名和密码调用外部系统,如果一切正常,它会返回一些数据。

这很简单,但它需要一个登录页面来防止未经授权的访问。以前的开发人员是 MVC 的新手,因此他们将 [Authorize] 属性放在控制器上(好),但随后意识到没有发生 MVC 身份验证,因此将 [AllowAnonymous] 添加到每个操作(坏)。 因为它是一个简单的站点,并且在每次调用获取数据时都有外部身份验证,所以我不想向站点添加数据库并创建用户等,但我想使用 Authorize 属性。

我想我可以通过在网站的配置文件中存储用户名和密码来使用表单身份验证 (see here) 例如username=Bob,pwd=abc123,当用户登录时,我调用外部系统,如果我得到数据,我知道凭据是好的。然后我可以以 Bob 的身份登录他们。当他们单击 LogOut 时,我可以将 Bob 从系统中注销。

如果我这样做,是否只有一个用户能够同时使用该网站?因为每个人都将以 Bob 身份登录?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 authentication


    【解决方案1】:

    事实证明,是的,这种方法很好用。多个用户可以浏览该站点,因为 cookie 已下载到浏览器以授予他们访问权限。如果我的网站根据登录用户做了一些事情,那么这将不是一个可行的选择。但是对于简单地知道他们的凭据已经过验证并将未经授权的用户拒之门外,它运作良好。

    网络配置看起来有点像这样:

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880">
        <credentials passwordFormat="SHA1" >
          <user name="Bob"
                password="a78b235b6b439925569a989863andmoredigitsandletters"/>
        </credentials>
      </forms>
    </authentication>
    <sessionState timeout="30" />
    

    您可以通过在网络上提供此服务的众多网站之一中输入您选择的密码来生成 SHA-1 密码。

    在代码中,一旦外部系统验证了用户的表单数据,我们就会使用已知用户的姓名和非哈希密码登录:

    if (FormsAuthentication.Authenticate("Bob", "p4$$w0rd"))
    {
         FormsAuthentication.SetAuthCookie("Bob", false);
    }
    

    现在用户可以访问 [Authorize] 操作和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 2011-12-25
      • 2023-04-05
      • 2011-02-23
      相关资源
      最近更新 更多