问题是,当提供这些凭据时,它们似乎会保存/缓存在开发人员无权访问的扩展中的某个位置,然后不断地重复使用
不完全是...代理服务器不会在每个连接请求上发送身份验证请求(需要 407 代理身份验证)。他们经常定期检查(取决于他们的设置)。
浏览器也可能会缓存(例如,Firefox 中有自动登录功能,但 Chrome 没有)。
有谁知道从 webRequest.onAuthRequired 监听器返回时详细信息保存在哪里,有没有办法清除/清除?
重要的一点是,如果前一个凭据正确,则客户端无需向同一服务器发送不同的凭据。
服务器请求凭据:
- 如果通过了正确的,则允许,并且服务器和浏览器都会保留一段时间
- 如果传递错误,浏览器不会保留它,但服务器可能会阻止
重复尝试一段时间,然后重新请求身份验证
您可以删除并重新启动webRequest.onAuthRequired
但就我个人而言,我还没有发现真正需要对新凭据执行此操作,除非我在开发过程中通过故意发送错误的凭据来测试错误的身份验证结果,而客户端使用时不应出现这种情况。
webRequest.onAuthRequired
每当服务器请求时就会触发。您可以尝试记录它以查看服务器执行此操作的频率。
扩展代码(我的意思是开发人员代码,而不是浏览器)也可以缓存凭据(以避免进行异步调用并减慢身份验证和连接速度)。
就我个人而言,我缓存所有代理的所有凭据,然后相应地响应身份验证请求。否则,您可以更改扩展代码缓存对象和/或删除并重新启动webRequest.onAuthRequired
.
返回 {cancel: true} 时实际会发生什么?为什么对该服务器的所有请求都会继续失败,而不会触发另一个 onAuthRequired?
这取决于扩展代码和服务器设置。服务器设置可能会在身份验证失败后阻止连接一段时间(以防止 Ddos 攻击)。
扩展代码还可以在发送之前检查正确的身份验证{cancel: true}
这会终止连接。在实践中,发送{cancel: true}
很少需要。
还有可能进入错误的身份验证循环,这将导致连接失败并锁定浏览器。
In chrome
,我会使用(确实使用且必须使用)aPromise
这是进行身份验证的正确方法,因为代码将停止执行,直到承诺得到解决。使用回调函数(chrome API 使用的)不会执行可能导致问题的原因。
简化一下:
- add
webRequest.onAuthRequired
- 根据 Auth 请求,启动
new Promise
获取正确的凭据
- 准备避免错误身份验证循环