gpt4 book ai didi

javascript - 在 Chrome 扩展程序中强制代理重新验证

转载 作者:行者123 更新时间:2023-11-30 14:16:40 25 4
gpt4 key购买 nike

我正在做一个扩展,它允许用户存储具有授权凭据(用户/密码)的代理服务器并在服务器之间切换。我正在监听 webRequest.onAuthRequired 事件,当服务器挑战身份验证时,根据此处的 provideCredentialsSync 示例,证明用户已保存的用户名/密码:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onAuthRequired#Examples

问题是,当提供这些凭据时,它们似乎被保存/缓存在开发人员无权访问的扩展中的某个地方,然后不断地被重新使用。因此,如果扩展用户随后将其凭据更改为不正确,浏览器会自动继续使用其 Proxy-Authorization header 中经过身份验证的凭据,并且请求成功。反之亦然,如果身份验证失败,并且按照上面的示例取消请求,则用户将其信用更改为正确,服务器不会再次挑战身份验证并且请求失败,无法提供新的信用。

Chrome 也不允许修改传出的 Proxy-Authorization header ,这意味着它不能在代码中删除/更改以强制服务器再次挑战。

所以我想核心问题是:

  • 有谁知道从webRequest.onAuthRequired 监听器,有没有办法清除/清除?

  • 返回 {cancel: true} 时实际发生了什么,以及为什么对该服务器的所有请求都继续失败而不触发另一个 onAuthRequired?

感谢任何人都能发出的光!

最佳答案

The problem is that when these credentials are provided, they seem to get saved/cached somewhere in the extension that the developer does not have access to, and then are continually re-used

不完全是...代理服务器不会在每个连接请求上发送身份验证请求(需要 407 代理身份验证)。他们经常定期检查(取决于他们的设置)。

浏览器也可能缓存(例如,在 Firefox 中自动登录的情况下,但 Chrome 没有)。

Does anyone know where the details are saved when returned from the webRequest.onAuthRequired listener, and is there a way to clear/purge?

重要的一点是,如果之前的凭据是正确的,则客户端无需向同一服务器发送不同的凭据。

服务器请求凭据:

  • 如果通过了正确的,则允许,服务器和浏览器都会保留一段时间
  • 如果传递了错误的,浏览器不会保留它,但服务器可能会阻止重复尝试一段时间,然后重新请求认证

您可以删除并重新启动 webRequest.onAuthRequired 但就我个人而言,我还没有发现真正需要为新凭据这样做,除非我在开​​发过程中通过故意发送错误来测试错误的身份验证结果客户不应该使用的凭据。

webRequest.onAuthRequired 在服务器请求时被触发。您可以尝试记录它以查看服务器执行此操作的频率。

扩展代码(我指的是开发人员代码,而不是浏览器)也可以缓存凭据(以避免进行异步调用并减慢身份验证和连接速度)。

就个人而言,我缓存了所有代理的所有凭据,然后相应地响应身份验证请求。否则,您可以更改扩展代码缓存对象和/或删除并重新启动 webRequest.onAuthRequired

What actually happens when {cancel: true} is returned and why do all requests to that server then continue to fail without firing another onAuthRequired?

这取决于扩展代码和服务器设置。服务器设置可能会在身份验证失败后阻止连接一段时间(以防止 Ddos 攻击)。

扩展代码还可以在发送终止连接的 {cancel: true} 之前检查正确的身份验证。实际上,很少需要发送 {cancel: true}

还有可能进入错误的身份验证循环,这将导致连接失败并锁定浏览器。

chrome 中,我会使用(确实使用并且必须使用)Promise,这是进行身份验证的正确方法,因为代码会停止执行,直到 promise 得到解决。使用回调函数(chrome API 使用)不会执行可能导致问题的原因。

简化:

  • 添加webRequest.onAuthRequired
  • 根据 Auth 请求,启动一个新 Promise 以获取正确的凭据
  • 为避免 Bad-Authentication 循环做好准备

关于javascript - 在 Chrome 扩展程序中强制代理重新验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com