当前位置: 首页 > 知识库问答 >
问题:

如何创建一个简单的登录在ASP. NET核心没有数据库和授权控制器访问

仲孙夕
2023-03-14

我正在使用ASP. NET Core 3.1。如何在不使用数据库的情况下创建一个简单的基于ASP. NET Core的登录。让我们说,而不是使用数据库,我有登录用户名和密码在appsettings.json.我可以很容易地访问和获取应用程序设置值。但是我应该如何实现登录功能,以及我应该如何在startup.cs中配置服务(在配置和配置服务中)。

在配置()方法中,我添加了应用。用户身份验证

当我登录并移动到使用注释[Authorize]的控制器类时,我得到以下错误

处理请求时发生未处理的异常。无效操作异常:未指定身份验证方案,也未找到默认挑战方案。默认的方案可以使用Add身份验证(字符串默认方案)或Add身份验证(操作配置选项)来设置。微软。AspNetCore.认证。身份验证服务。挑战同步(HttpContext上下文,字符串方案,身份验证属性)Microsoft.AspNetCore.授权。AuthorizationMiddleware.调用(HttpContext上下文)Microsoft.AspNetCore.诊断。DeveloperExceptionPageMiddleware.调用(HttpContext上下文)


共有1个答案

扈俊健
2023-03-14

首先,将用户的凭据存储到appsettings.json不是一个好主意。如果您想实现测试目的,您可以使用cookie身份验证:

不使用ASP. NET核心标识使用cookie身份验证

下面是一个简单的代码示例,供您参考:

>

  • Startup.ConfigureServices方法中,使用AddAuthenticationAddCookie方法创建身份验证中间件服务:

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/Login";
            });
    

    并在配置中启用中间件:

    app.UseAuthentication();
    app.UseAuthorization();
    

    您可以对受保护的控制器/操作应用[Authorize]属性。当用户未通过身份验证时,defalut用户将重定向到LoginPath进行cookie身份验证<代码>/Account/Login操作将显示用户名/密码文本框以收集用户凭证。

    用户输入凭证并单击提交按钮后,post方法将检查凭证并创建cookie:

    public class AccountController : Controller
    {
    
        private readonly IOptions<List<UserToLogin>> _users;
        public AccountController (IOptions<List<UserToLogin>> users)
        {
    
            _users = users;
        }
    
        [HttpPost]
        public async Task<IActionResult> Login(UserToLogin userToLogin)
        {
            var user = _users.Value.Find(c => c.UserName == userToLogin.UserName && c.Password == userToLogin.Password);
    
            if (!(user is null))
            {
                var claims = new List<Claim>
                {
                    new Claim(ClaimTypes.Name,userToLogin.UserName),
                    new Claim("FullName", userToLogin.UserName),
                    new Claim(ClaimTypes.Role, "Administrator"),
                };
    
                var claimsIdentity = new ClaimsIdentity(
                    claims, CookieAuthenticationDefaults.AuthenticationScheme);
    
                var authProperties = new AuthenticationProperties
                {
    
                    RedirectUri = "/Home/Index",
    
                };
    
                await HttpContext.SignInAsync(
                    CookieAuthenticationDefaults.AuthenticationScheme,
                    new ClaimsPrincipal(claimsIdentity),
                    authProperties);
            }
    
            return Redirect("/Accout/Error");
        }
    }
    

    UserToLogin.cs:

    public class UserToLogin
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    
    }
    

    appsettings.json:

    {
        "Users": [
            {
                "UserName": "xxxxxxxx",
                "Password": "xxxxxxx"            
            },
            {
                "UserName": "xxxxxxxx",
                "Password": "xxxxxxxxxxxx"            
            }       
        ],           
    }
    

    并在ConfigureServices中注册:

    services.Configure<List<UserToLogin>>(Configuration.GetSection("Users"));
    

  •  类似资料:
    • 也许我错过了它,但我正在试图弄清楚如何在ASP.NET核心中实现这一点。我查看了源代码(https://github.com/aspnet/security),但没有看到任何类似的内容。有没有新的方法来完成这一点?我需要创建一个控制器然后自己做吗? 我看到了如何通过中间件来设置OAuth身份验证,但这涉及到从API发出声明的授权部分。

    • 问题内容: 我需要授予对服务器上所有300个数据库的新登录读取访问权限。如何在不选中用户映射区域中的300个复选框的情况下完成此任务? 问题答案: 一种方法是在SSMS的查询菜单上设置“结果为文本”,然后执行以下操作。 它实际上并没有进行更改,而是生成了一个脚本供您查看和执行。 或者,你可以看看 这里或亚伦Bertrand的改进版本在这里 如果运行此命令时未看到所有字符,请打开“文本查询选项”,然

    • 问题内容: 我有一个存储过程,该过程可以找到所有现有数据库并从每个数据库的表中读取数据。 有没有一种方法可以使我对所有数据库以及将来的所有数据库都具有登录读取访问权限,即在添加新数据库时我无需执行任何操作? 有服务器角色可以工作吗?有没有一种方法可以使SQL代理作业在任何新数据库上添加权限?还是有其他方法? 问题答案: 对于新数据库,将用户添加到模型数据库中。这用作所有新数据库的模板。 对于现有数

    • 对于一个练习,我尝试创建一个登录页面。这是我第一次使用php。我已经看过很多指南,也看过stackoverflow的很多问题。这就是我想到的。(我正在对数据库使用XAMPP) 文件夹php:login。php,会话。欢迎。php,连接。php 文件夹页面:登录。html DB名称:leftoveryouth 表名:客户端 Colums:id、名、姓、出生日期、街道、街道、城市、plz、用户名、电子

    • 知道如何正确设置控制器描述吗? 谢谢,马里奥