【问题标题】:How to pass Windows Authentication credential using $.Ajax to Web API service如何使用 $.Ajax 将 Windows 身份验证凭据传递给 Web API 服务
【发布时间】: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


【解决方案1】:

Web Api 站点 (B) 必须附加标头

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

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

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

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多