如何使用$ .Ajax将Windows身份验证凭据传递给Web API服务

时间:2017-11-29 01:27:25

标签: javascript ajax authentication asp.net-web-api2

如果问题是愚蠢的话,道歉,说实话我自己觉得我错过了很简单的事情......!

这是案例: 我们有一个使用Windows身份验证的网站(A) 该应用程序调用托管在同一服务器上的另一个Web api站点(B),该服务器也使用Windows身份验证。

使用以下代码我可以调用web apis并模拟用户:

var wi = (System.Security.Principal.WindowsIdentity)System.Web.HttpContext.Current.User.Identity;
wi.Impersonate();
using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
    //call the api ... successfully impersonated!
}

上面我可以从站点A(在服务器端代码中)调用站点B上的web apis。

我的问题是在客户端(javascript),我需要调用ajax方法到GET / POST / ... web apis。 我知道我需要将xhrFields添加到ajax调用:

$.ajax({
    url: apiUrl,
    type: 'GET',
    xhrFields: {
        withCredentials: true
    },
    success: function (res) {
    },
    error: function (res) {
    }
});

然而,这会提示输入凭据,而用户已经提供了浏览网站A的凭据。 有什么办法以某种方式将会话中的凭证(或令牌)包含在ajax调用中?

提前感谢,

1 个答案:

答案 0 :(得分:0)

Web Api网站(B)必须附加标题

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

第1行: 它会响应来自原始服务器(PHP:$_SERVER['HTTP_ORIGIN']或Apache:{HTTP_ORIGIN})的请求

第2行: 如果标头响应为true,它将发送凭据