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。
我使用 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。