Asp.net mvc 访问ASP.NET Web API Restful服务时出现跨域问题:
情况如下:Asp.net mvc 访问ASP.NET Web API Restful服务时出现跨域问题:,asp.net-mvc,asp.net-web-api,cross-domain,windows-authentication,impersonation,Asp.net Mvc,Asp.net Web Api,Cross Domain,Windows Authentication,Impersonation,情况如下: 服务托管在假定示例_Services.com上。这些服务是ASP.NET Web API Restful服务。 此服务器上已启用Windows身份验证(NTLM) 客户端托管在假定示例_Client.com上。这是在MVC ASP.NET中实现的。 此服务器上已启用Windows身份验证(NTLM)。 此服务器上还启用了ASP.NET模拟 现在,客户端希望通过Windows身份验证访问example_services.com提供的所有服务。 因此,在这里,两者都托管在不同的域上(跨域
首先,您需要在Web API中启用跨源请求。按照以下链接中的说明进行操作 然后,您必须在从客户端向web API发出任何请求时传递凭据。请参阅有关从以下链接传递凭据的信息 希望这有帮助 问候
Arkadas首先,您需要在Web API中启用跨源请求。按照以下链接中的说明进行操作 然后,您必须在从客户端向web API发出任何请求时传递凭据。请参阅有关从以下链接传递凭据的信息 希望这有帮助 问候 阿卡达斯 现在,客户希望访问由提供的所有服务 示例_services.com通过Windows身份验证。因此,两者都在这里 托管在不同域上(跨域) 首先,您需要启用跨源资源共享。如果你不熟悉这个概念,我建议你 在WebAPI中启用CORS非常非常简单(实际上,在大多数web框架中都是如此)。 您需要在WebAPI项目中引用
System.Web.Cors
。然后,要启用基于控制器的共享,请使用以下属性装饰ApicController
using System.Web.Http;
namespace Example.WebAPI.Controllers
{
[EnableCors(origins:"example_client.com", headers:"*",methods:"*",SupportsCredentials=true)]
public class ExampleController : ApiController
{
//The kickers in that attribute are the "origins" and "SupportsCredentials"
//Note that SupportsCredentials is not supported with wildcard origins
}
}
这样做的目的是根据设置的有效[Origin]请求标头设置[Access Control Allow Origin]响应标头。这样做会向调用客户端打开WebAPI
正如您所想象的,属性的“methods”属性允许您锁定特定的HttpVerbs进行访问
如何将“已登录用户”的凭据传递给服务
该属性上还有一个“SupportsCredentials”属性,允许您通过请求传递凭据
如果尝试使用NTLM身份验证,请将EnableCors属性的“SupportsCredentials”属性设置为true。这将启用Access Control Allow Credentials
HTTPHeader。您的凭据不会自动发送,但您可以通过在XHR上设置with credentials:true
来发送凭据
如果您的客户对basic auth感到满意,您应该能够通过以下方式完成:
$.ajax({
url: url,
data: {},
username: "corp.domain\corp.username"
password: "69iNgCh1pmunk5"
xhrFields: {
withCredentials: true
}
});
是否可以绕过“windows身份验证windows pop” 客户端尝试访问任何服务的时间 您可能正在寻找单一登录解决方案。它们也不平凡 [编辑] 启用CORS的端点上的withCredentials和basicAuth属性应绕过质询弹出窗口。我最初对这个问题的解释是错误的 现在,客户希望访问由提供的所有服务 示例_services.com通过Windows身份验证。因此,两者都在这里 托管在不同域上(跨域) 首先,您需要启用跨源资源共享。如果你不熟悉这个概念,我建议你 在WebAPI中启用CORS非常非常简单(实际上,在大多数web框架中都是如此)。 您需要在WebAPI项目中引用
System.Web.Cors
。然后,要启用基于控制器的共享,请使用以下属性装饰ApicController
using System.Web.Http;
namespace Example.WebAPI.Controllers
{
[EnableCors(origins:"example_client.com", headers:"*",methods:"*",SupportsCredentials=true)]
public class ExampleController : ApiController
{
//The kickers in that attribute are the "origins" and "SupportsCredentials"
//Note that SupportsCredentials is not supported with wildcard origins
}
}
这样做的目的是根据设置的有效[Origin]请求标头设置[Access Control Allow Origin]响应标头。这样做会向调用客户端打开WebAPI
正如您所想象的,属性的“methods”属性允许您锁定特定的HttpVerbs进行访问
如何将“已登录用户”的凭据传递给服务
该属性上还有一个“SupportsCredentials”属性,允许您通过请求传递凭据
如果尝试使用NTLM身份验证,请将EnableCors属性的“SupportsCredentials”属性设置为true。这将启用Access Control Allow Credentials
HTTPHeader。您的凭据不会自动发送,但您可以通过在XHR上设置with credentials:true
来发送凭据
如果您的客户对basic auth感到满意,您应该能够通过以下方式完成:
$.ajax({
url: url,
data: {},
username: "corp.domain\corp.username"
password: "69iNgCh1pmunk5"
xhrFields: {
withCredentials: true
}
});
是否可以绕过“windows身份验证windows pop” 客户端尝试访问任何服务的时间 您可能正在寻找单一登录解决方案。它们也不平凡 [编辑] 启用CORS的端点上的withCredentials和basicAuth属性应绕过质询弹出窗口。我最初对这个问题的解释是错误的