【发布时间】:2018-05-12 14:54:20
【问题描述】:
如果问题很愚蠢,我很抱歉,说实话,我自己觉得我错过了一些非常简单的东西......!
情况是这样的: 我们有一个使用 Windows 身份验证的网站 (A) 应用程序调用托管在同一服务器上的另一个 Web api 站点 (B),该服务器也使用 Windows 身份验证。
使用以下代码,我可以调用 Web api 并模拟用户:
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 方法来获取/发布/... web api。 我知道我需要将 xhrFields 添加到 ajax 调用中:
$.ajax({
url: apiUrl,
type: 'GET',
xhrFields: {
withCredentials: true
},
success: function (res) {
},
error: function (res) {
}
});
但是,这会提示输入凭据,而用户已经提供了凭据来浏览网站 A。 有什么方法可以将会话中的凭据(或令牌)包含到 ajax 调用中?
提前致谢,
【问题讨论】:
-
澄清一下:从
backend A调用API B很好,但直接从frontend A调用API B是个问题? -
@timur 是的,后端 A 中的模拟让我调用 API B 方法。但 XHRFields 'withCredentials' 仍会提示辅助身份验证窗口。
标签: javascript ajax authentication asp.net-web-api2