首页 > 解决方案 > 我如何让这个基本身份验证在 .NET Core 中工作

问题描述

我正在使用并且为此Basic Authentication创建了一个。Middleware当我使用该Authorize属性并尝试通过 Postman 进行 API 调用时,我401 Unauthorize什至在 Postman 中添加了授权详细信息。

我不确定这是否是我通过邮递员调用控制器操作的方式,或者我是否缺少邮递员中的标题选项。

配置服务

        services
            .AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
            .AddBasicAuthentication(GetBasicAuthenticationOptions(users));

配置

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
        app.UseCors("SiteCorsPolicy");
        app.UseAuthentication();
    }

基本认证实现

    private Action<BasicAuthenticationOptions> GetBasicAuthenticationOptions(IList<UserConfiguration> users)
    {
        return options =>
        {
            options.Realm = "Public API";
            options.Events = new BasicAuthenticationEvents
            {
                OnValidatePrincipal = context =>
                {
                    var authenticatedUser = users.FirstOrDefault(u =>
                        u.Username == context.UserName && u.Password == context.Password);

                    if (authenticatedUser != null)
                    {
                        var claims = new List<Claim>
                        {
                            new Claim(ClaimTypes.Name,
                                context.UserName,
                                context.Options.ClaimsIssuer)
                        };

                        var principal = new ClaimsPrincipal(new ClaimsIdentity(claims,
                            BasicAuthenticationDefaults.AuthenticationScheme));
                        context.Principal = principal;

                        return Task.CompletedTask;
                    }

                    return Task.FromResult(AuthenticateResult.Fail("Authentication failed."));
                }
            };
        };
    }

带有授权的控制器操作

    [Authorize]
    [HttpPost]
    [Route("test")]
    public IActionResult Test()
    {
        return Json("yes");
    }

邮递员请求

用户名和密码在 appsettings.json 文件中

在此处输入图像描述

标签: asp.net-mvcasp.net-corebasic-authenticationauthorize-attribute

解决方案


问题只是因为app.UseMvc();放在了之前app.UseAuthentication();。我只需要放置app.UseMvc();之后app.UseAuthentication();就可以修复它。


推荐阅读