ntlm - 如何使用具有基本身份验证(NTLM、协商)的 Service Worker

标签 ntlm service-worker http-negotiate

我一直在尝试在 IIS 托管的网站中使用 service worker 来缓存站点的一些静态内容。该站点是使用 Windows 身份验证的内部应用程序。我已经能够在没有太多麻烦的情况下注册和运行 service worker,但是一旦我打开缓存并开始向缓存添加文件,promise 就会因授权失败而失败。返回的 HTTP 结果是 401 Unauthorised。这是前几个请求的通常响应,直到浏览器和服务器能够协商授权。

我将很快发布一些代码,这些代码应该有助于解释。

编辑

var staticCacheName = 'app-static-v1';
console.log("I AM ALIVE");
this.addEventListener('install', function (event) {
    console.log("AND I INSTALLED!!!!");
    var urlsToCache = [
        //...many js files to cache
        '/scripts/numeral.min.js?version=2.2.0',
        '/scripts/require.js',
        '/scripts/text.js?version=2.2.0',
        '/scripts/toastr.min.js?version=2.2.0',
    ];


    event.waitUntil(
        caches.open(staticCacheName).then(function (cache) {
            cache.addAll(urlsToCache);
        }).catch(function (error) {
            console.log(error);
        })
    );
});

最佳答案

鉴于缺少代码,这只是一个猜测,但如果您正在执行以下操作:

caches.open('my-cache').then(cache => {
  return cache.add('page1.html'); // Or caches.addAll(['page1.html, page2.html']);
});

你正在利用隐含的 Request object creation (请参阅第 6.4.4.4.1 节)当您将字符串传递给 cache.add() 时会发生这种情况。/cache.addAll() . Request创建的对象使用默认值 credentials mode , 即 'omit' .

你可以做的是显式构造一个 Request包含您喜欢的凭证模式的对象,在您的情况下可能是 'same-origin' :
caches.open('my-cache').then(cache => {
  return cache.add(new Request('page1.html', {credentials: 'same-origin'}));
});

如果你有一堆 URL,你将一个数组传递给 cache.addAll() ,您可以 .map()它们对应的数组 Request s:
var urls = ['page1.html', 'page2.html'];
caches.open('my-cache').then(cache => {
  return cache.addAll(urls.map(url => new Request(url, {credentials: 'same-origin'})));
});

关于ntlm - 如何使用具有基本身份验证(NTLM、协商)的 Service Worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193221/

相关文章:

c# - 仅在特定机器上调用 Web 服务时出现 401

混帐 "fatal: Authentication failed for ' http :. 。来自 Microsoft Visual Studio Team Foundation Server 的 .'"

kerberos - Linux Docker容器中的Windows身份验证

reactjs - 如何使用 create-react-app 从 Service Worker 中排除某些 url?

service-worker - 在 Service Worker 中处理 fetch 但允许客户端查看重定向

javascript - 同步事件将结果传递给应用程序或监听数据库事件

Excel VBA : NTLM/Kerberos & Negotiate Authentication in VBA-Web/WinHttp

python - Python 中的摘要式身份验证?

c# - 什么是 NTLM/Authenticate/Negotiate Web 身份验证

Python Kerberos-1.1.1.tar.gz 在 Windows 上安装失败