首页 > 解决方案 > 在 OWIN 自托管中使用集成的 Windows 身份验证发送大型 POST 请求

问题描述

我正在尝试为经过身份验证的 HTTP POST 请求设置一个端点,该端点将处理其正文大小约为 15 kB 的请求。

我按照MSDN 上的描述定义了

var httpListener = (OwinHttpListener) appBuilder.Properties[typeof(OwinHttpListener).FullName];
httpListener.Listener.AuthenticationSchemeSelectorDelegate = request =>
    request.HttpMethod == "POST"
        ? AuthenticationSchemes.IntegratedWindowsAuthentication
        : AuthenticationSchemes.Anonymous;

在我的Startup.Configuration. 这对于较小的请求很有效,但是当我尝试通过正文大小约为 15 kB 的请求发送时,我最终会收到 HTTP 400 错误请求。为了测试这一点,我正在使用

curl -v --ntlm --negotiate -u {username}:{password} -d @myfile.txt http://localhost:8080/my-endpoint

其中myfile.txt大约是 15 kB。起初,我认为这是关于 Content-Length 受到限制的问题,并实施了此答案中建议的中间件以更改限制;不过,这是一条红鲱鱼,因为中间件最终只被较小的请求调用。事实上,如果我完全摆脱身份验证,一切都会按预期进行。

此外,如果我使用AuthenticationSchemes.Ntlm而不是AuthenticationSchemes.IntegratedWindowsAuthentication,那么 curl 请求确实会顺利通过,所以我有一个有效的解决方法,但我仍然很好奇是什么首先导致了问题,以及是否有解决方法t 依赖回退到 NTLM。

标签: c#asp.net-web-apiowinwindows-authenticationntlm

解决方案


推荐阅读