Web应用程序受所有客户端的单一密码保护

时间:2016-03-01 15:16:45

标签: asp.net authentication asp.net-mvc-5 asp.net-web-api2 single-page-application

我想知道是否有一种只用一个密码保护ASP.Net Web应用程序的标准方法?换句话说,不需要用户名,所有客户端都使用相同的密码进行身份验证。 或者有没有人有自己的解决方案?

1 个答案:

答案 0 :(得分:1)

您只需使用Identity框架来瞄准此提议。实际上,您不需要任何用户或密码进行身份验证。

[HttpPost]
public ActionResult Login(string password)
{
    if (password=="MyVerySecretPassword")
    {
        var ident = new ClaimsIdentity(
            new[] { 
                // adding following 2 claim just for supporting default antiforgery provider
              new Claim(ClaimTypes.NameIdentifier, "JustAnuniqueName"),
              new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),

              new Claim(ClaimTypes.Name,"JustAnuniqueName"),
          },
          DefaultAuthenticationTypes.ApplicationCookie);

        HttpContext.GetOwinContext().Authentication.SignIn(
            new AuthenticationProperties { IsPersistent = false }, ident);
        return RedirectToAction("MyAction"); // auth succeed 
     }
     // invalid password
     ModelState.AddModelError("", "invalid username or password");
     return View();
}

但如果您使用哈希密码并检查哈希密码而不是简单的if语句,那会好得多。为此,您可以使用PasswordHasher类来哈希并验证密码。

首先散列您想要的密码并将其保存在首选存储空间(数据库,文件,代码硬编码或其他任何地方):

string hashedPassword = new PasswordHasher().HashPassword("MyVerySecretPassword");

现在你已经有了哈希。您可以使用VerifyHashedPassword()方法进行验证。

if(new PasswordHasher()
    .VerifyHashedPassword("myHashedPassword",password)==PasswordVerificationResult.Success)
{
    // the password is correct do whatever you want
}

你也可以看到我为展示它而制作的simple working example