浏览器未添加服务器请求的身份验证标头

问题描述 投票:0回答:1

我有一个在 IIS 中运行的 ASP.NET Core WebApi 项目,并且始终支持 NTLM 和协商作为身份验证方法。我需要为一个特定端点添加基本身份验证,因此我为它创建了一个中间件:

public class BasicAuthMiddleware
{
    private readonly RequestDelegate next;

    public BasicAuthMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task InvokeAsync(HttpContext context, IOptions<List<BasicCredential>> credentials)
    {
        if (context.Request.Path.Value.Contains("/basicauthendpoint"))
        {
            var authHeader = (string)context.Request.Headers["Authorization"];
            if (authHeader != null && authHeader.StartsWith("Basic "))
            {
                //Validate credentials here...
                await next(context);
                return;
            }

            context.Response.Headers["WWW-Authenticate"] = "Basic";
            context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
        else
        {
            await next(context);
        }
    }
}

第一次按预期调用中间件,当没有身份验证标头时,它返回 401。然后浏览器显示用户名/密码对话框,我输入凭据并单击确定重新提交。

第二次调用中间件,仍然缺少authenticate header

这是浏览器的问题还是因为我设置了额外的身份验证方法?

c# asp.net-core google-chrome basic-authentication asp.net-core-middleware
1个回答
0
投票

在您的场景中,访问时添加标头无效

/basicauthendpoint
,这是预期的行为。

因为Web Server端无法改变客户端发送请求的行为。

正确的方式

  1. 登录应用程序时,我们可以生成和管理cookie。

  2. 在访问

    /basicauthendpoint
    时,我们可以修改当前的cookie,或者添加一些内容,以满足认证需求。

© www.soinside.com 2019 - 2024. All rights reserved.