Web API 2 OWIN Self Host 只能通过 IP 地址连接

Web API 2 OWIN Self Host can only connect via IP address

我使用 Microsoft OWIN 3.0.1 和 Web API 5.2.3 NuGet 包创建了一个自托管服务。它还使用 Microsoft.AspNet.WebApi Cors.5.2.3 和 Microsoft.Owin.Cors 3.0.1 包来支持 CORS。 CORS设置配置如下:

private static void ConfigureCrossOriginResourceSharing(IAppBuilder app, HttpConfiguration config)
{
    app.UseCors(CorsOptions.AllowAll);

    var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);
}

托管启动如下:

var startOptions = new StartOptions(url: "http://*:64000/");

Task.Run(() =>
{
    // Start OWIN host 
    using (WebApp.Start(startOptions, startUp.Configuration))
    {
        //etc.

连接到服务时,我只能使用 IP 地址调用它(例如 http://192.168.0.1:64000/). When using the DNS name (i.e. http://hostname:64000/),返回 HTTP 502 Bad Gateway 错误。这并不理想。

我认为这与 CORS 配置有关。任何想法可能是错误的?

更新:根据下面的建议,我已将开始 url 更改为 http://+:64000/。我现在收到来自客户端的 400 Bad Request 响应。我可以 ping 解析为完全限定名称(例如 hostname.domain.corp 域后缀)的服务器,我也尝试过但得到相同的结果。

这原来与自托管网站的身份验证设置有关。出于某种原因,在我们的网络上(可能是 2003 AD vs 2012 服务器进行托管,我不确定)Kereberos 身份验证失败。使用 IP 地址时,身份验证回退到使用成功的 NTLM。将身份验证设置为仅使用 NTLM 允许同时使用主机名和 IP 地址。

之前(失败,IP 仅在回落到 NTLM 时):

listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

之后(主机和 IP 均成功):

listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;

如果您想使用 Kerberos 进行身份验证,您需要使用 AD 为您用于应用程序的主机名/端口组合注册一个 SPN。