我正在用ASP.NET核心MVC2.0建立一个相当简单的网站,这或多或少是一个图片库,只为我。到目前为止,我没有使用任何数据库。它只是一个包含元数据和图像文件本身的json文件。
现在这个网站应该得到一个隐藏的管理页面,在那里我(只有我)可以上传新的图片。
什么是一种简单但仍然安全的方式来添加这个管理页面,而不必向站点引入全面的用户管理?我想避免添加一个数据库和实体框架等网站-将只有一个用户。
换句话说,在只有一个用户进行身份验证的情况下,添加用户管理的安全而简单的方法是什么:我,管理员。
发布于 2017-09-17 04:50:01
在appsettings.json中存储所需用户名/密码的散列版本,然后重新散列通过登录屏幕提供的值并进行比较。
这里有一个如何完成登录的示例。此引导程序脱离了Asp.Net身份中存在的默认散列器,但您可以使用任何散列函数。
你可能还想创建一些其他的帮助器,以防你想要从你的应用程序重置散列密码,而不是进入设置文件。
appsettings.json
{
...
"LoginCredentials": {
"UsernameHash": "AQAAAAEAACcQAAAAENmv+riLvtTIa5wafXxzEX4rMSMXwVzG00q4jZKBI7Lx/oe2PFdqW1r521HBsL567g==",
"PasswordHash": "AQAAAAEAACcQAAAAEKwwppiixEQM9QO7hOXcoXXgIvHKs9QHRz1k0lAZ3noVwID2lv+I+Dwc9OheqDGFBA=="
}
}Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//Assuming services.AddIdentity<...>(...) is not added as a service
services.Configure<LoginCredentialOptions>(Configuration.GetSection("LoginCredentials"));
services.AddTransient<IPasswordHasher<User>, PasswordHasher<User>>();
...
}LoginCredentialOptions.cs
public class LoginCredentialOptions
{
public string UsernameHash { get; set; }
public string PasswordHash { get; set; }
}AccountController.cs
...
public async Task<IActionResult> Login([FromServices] IOptions<LoginCredentialOptions> loginCreds, LoginViewModel model, string returnUrl = null)
{
if (ModelState.IsValid)
{
var passwordResult = passwordHasher.VerifyHashedPassword(null, loginCreds.Value.PasswordHash, model.Password);
var usernameResult = passwordHasher.VerifyHashedPassword(null, loginCreds.Value.UsernameHash, model.Username);
if (passwordResult == PasswordVerificationResult.Success &&
usernameResult == PasswordVerificationResult.Success)
{
//Create identity cookie and sign in
RedirectToAction(nameof(Index), "Home");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}https://stackoverflow.com/questions/46207293
复制相似问题