You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将HttpListener程序迁移至.NET Core 7后无法获取Basic Auth账号密码

把基于HttpListener的程序迁到.NET Core 7后拿不到User对象(用户名密码),核心原因是ASP.NET Core默认未启用认证中间件——原HttpListener会自动解析Basic认证请求头并填充User对象,但Core采用模块化设计,需要手动配置认证、授权逻辑才能让User正常赋值。按以下步骤解决:

  1. 安装Basic认证依赖包
    在项目中安装NuGet包:Microsoft.AspNetCore.Authentication.Basic

  2. 配置认证与授权中间件
    修改Program.cs,添加认证服务并启用对应中间件(注意中间件顺序:先认证后授权):

var builder = WebApplication.CreateBuilder(args);

// 配置Basic认证规则
builder.Services.AddAuthentication("Basic")
    .AddBasic(options =>
    {
        options.Realm = "你的应用域标识";
        options.Events = new BasicAuthenticationEvents
        {
            OnValidateCredentials = async context =>
            {
                // 此处编写你的用户名密码验证逻辑(比如从数据库查询校验)
                // 以下为示例代码,实际替换成业务逻辑
                if (context.UserName == "test" && context.Password == "123456")
                {
                    var claims = new[] { new Claim(ClaimTypes.Name, context.UserName) };
                    context.Principal = new ClaimsPrincipal(new ClaimsIdentity(claims, context.Scheme.Name));
                    context.Success();
                }
            }
        };
    });

// 添加授权服务
builder.Services.AddAuthorization();
builder.Services.AddControllers();

var app = builder.Build();

// 中间件顺序不可颠倒:先执行认证,再执行授权
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();
  1. 给接口添加授权标记
    在你的Post接口上添加[Authorize]属性,确保只有经过认证的请求才能访问,此时User对象会被正确填充:
[HttpPost]
[Authorize]
public async Task<ActionResult<string>> Post()
{
    var remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

    var stream = Request.Body;
    string requestMessage;

    using (var reader = new StreamReader(stream))
        requestMessage = await reader.ReadToEndAsync();

    // 获取已认证的用户名
    var userName = User.Identity?.Name;
    // 注意:出于安全考虑,默认不会将密码存入User对象。若业务必须获取密码,需在OnValidateCredentials中将密码添加到Claim(不推荐)

    return Ok($"收到来自{remoteIpAddress}的请求,当前用户:{userName}");
}

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:30:45