这是案例: 我们有一个使用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调用中?
提前感谢,
答案 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,它将发送凭据