首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加管理页面,无需完全成熟的用户管理

添加管理页面,无需完全成熟的用户管理
EN

Stack Overflow用户
提问于 2017-09-14 05:45:28
回答 1查看 380关注 0票数 1

我正在用ASP.NET核心MVC2.0建立一个相当简单的网站,这或多或少是一个图片库,只为我。到目前为止,我没有使用任何数据库。它只是一个包含元数据和图像文件本身的json文件。

现在这个网站应该得到一个隐藏的管理页面,在那里我(只有我)可以上传新的图片。

什么是一种简单但仍然安全的方式来添加这个管理页面,而不必向站点引入全面的用户管理?我想避免添加一个数据库和实体框架等网站-将只有一个用户。

换句话说,在只有一个用户进行身份验证的情况下,添加用户管理的安全而简单的方法是什么:我,管理员。

EN

回答 1

Stack Overflow用户

发布于 2017-09-17 04:50:01

在appsettings.json中存储所需用户名/密码的散列版本,然后重新散列通过登录屏幕提供的值并进行比较。

这里有一个如何完成登录的示例。此引导程序脱离了Asp.Net身份中存在的默认散列器,但您可以使用任何散列函数。

你可能还想创建一些其他的帮助器,以防你想要从你的应用程序重置散列密码,而不是进入设置文件。

appsettings.json

代码语言:javascript
复制
{
    ...
    "LoginCredentials": {
        "UsernameHash": "AQAAAAEAACcQAAAAENmv+riLvtTIa5wafXxzEX4rMSMXwVzG00q4jZKBI7Lx/oe2PFdqW1r521HBsL567g==",
        "PasswordHash": "AQAAAAEAACcQAAAAEKwwppiixEQM9QO7hOXcoXXgIvHKs9QHRz1k0lAZ3noVwID2lv+I+Dwc9OheqDGFBA=="
    }
}

Startup.cs

代码语言:javascript
复制
 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

代码语言:javascript
复制
public class LoginCredentialOptions
{
    public string UsernameHash { get; set; }

    public string PasswordHash { get; set; }
}

AccountController.cs

代码语言:javascript
复制
...
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46207293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档