具有Windows身份验证的ASP.NET Web API缺少标头WWW-Authenticate作为响应

时间:2019-01-04 13:57:44

标签: asp.net security

我了解到,对于安全请求,客户端首先进行匿名请求,获得401响应和WWW-Authenticate标头,然后使用接收到的身份验证系统重试。

现在,我有以下代码:(如果缺少某些内容,请告诉我)

web.config:

<system.web>
  <compilation debug="true" targetFramework="4.6.1" />
  <httpRuntime targetFramework="4.6.1" />
  <authentication mode="Windows"/>
</system.web>

Controller.cs:

[Authorize]
public class FunctionalLocationsController : ApiController
{
  // ..
}

WebApiConfig:

config.EnableCors(new EnableCorsAttribute("*", "*", "*")
{
    SupportsCredentials = true
});
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional });

请求(提琴手):

GET http://localhost/MADI.Backend.WebApi/api/functionallocations HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: en-GB,en;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive

响应头:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Fri, 04 Jan 2019 13:44:17 GMT
Content-Length: 6084

响应还包含HTML中有关401的人工消息。

有人知道为什么它不返回WWW-Authenticate标头吗?

谢谢

1 个答案:

答案 0 :(得分:0)

S ...我在这里张贴10分钟后就发现了它...

您需要在Windows功能中明确启用Windows Integrated Security。

我认为<authentication mode="Windows"/>启用了它,但是只有在安装了它的情况下,才这样。否则(据我所知)它无声无事。

现在可以使用。