访问ASP.NET Web API Restful服务时出现跨域问题:



情况如下:

  1. 服务托管在假设example_Services.com上。这些服务是ASP.NET Web API Restful服务。对此启用了Windows身份验证(NTLM)。

  2. 客户端托管在假设example_Client.com上。这是MVC ASP.NET中的。对此启用了Windows身份验证(NTLM)。此上还启用了ASP.NET模拟。

现在,客户端希望通过Windows身份验证访问example_services.com提供的所有服务。因此,在这里,两者都托管在不同的域(跨域)上。

Windows身份验证在客户端正常工作,但在访问example_client.com中example_services.com的服务时,我们收到401(拒绝访问错误)。

所以我有以下问题:

  1. 如何将"已登录用户"的凭据传递给服务
  2. 每次客户端尝试访问任何服务时,是否可以绕过"windows身份验证窗口弹出"

首先,您需要在Web API中启用交叉原始请求。按照以下链接中的说明启用跨来源请求

然后,您必须在从客户端向web API发出任何请求时传递凭据。请参阅以下链接中的传递凭据信息在跨来源请求中传递凭据

希望这能有所帮助。

问候阿卡达斯

现在客户端希望访问由提供的所有服务example_services.com通过Windows身份验证。因此,两者都在这里托管在不同的域上(跨域)。

首先,您需要启用跨来源资源共享。如果你不熟悉这个概念,我推荐你参考RFC6454

在WebAPI中启用CORS真的非常简单(实际上在大多数web框架中都是如此)。您将希望在WebAPI项目中引用System.Web.Cors。然后,要启用基于控制器的共享,请使用以下属性装饰您的ApiController

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。

正如你可能想象的;方法";属性允许您锁定要访问的特定HttpVerb。

如何通过";登录用户";服务。

还有一个";SupportsCredentials";属性,该属性将允许您通过请求传递凭据。

如果您尝试使用NTLM身份验证,请设置;SupportsCredentials";属性设置为true。这将启用Access-Control-Allow-Credentials HTTPHeader。您的凭据不会自动发送,但您可以通过在XHR上设置withCredentials: true来发送凭据。

如果你的客户对基本的身份验证很满意,你应该能够通过这种方式做到这一点:

$.ajax({
   url: url,
   data: {},
   username: "corp.domaincorp.username"
   password: "69iNgCh1pmunk5"
   xhrFields: {
      withCredentials: true
   }
});

CORS和Windows身份验证

更多关于Origin、Access Control Allow Origin和CORS


在Web API 中启用跨来源请求


是否可以绕过";windows认证windows pop";每一个客户端尝试访问任何服务的时间。

您可能正在寻找单一登录解决方案。它们也不是琐碎的。

[编辑]

启用CORS的端点上的withCredentials和basicAuth属性应绕过质询弹出窗口。我最初把那个问题解释错了。

相关内容

  • 没有找到相关文章

最新更新