OkHttp Basic tarpinio serverio autentifikavimas: sustabdykite atmestus pakartojimus
Naudokite OkHttp proxyAuthenticator tarpinio serverio iššūkiams ir nustokite kartoti nepakeistą autorizacijos bandymą.
HTTP tarpiniam serveriui, siūlančiam Basic autentifikavimą, OkHttp proxyAuthenticator gali grąžinti užklausą su prisijungimo duomenimis. Grąžinkite null po to, kai autorizacijos bandymas jau buvo atmestas, o ne siųskite tą patį atsakymą dar kartą:
.proxyAuthenticator { _, response ->
if (response.request.header("Proxy-Authorization") != null) {
null
} else {
response.request.newBuilder()
.header("Proxy-Authorization",
Credentials.basic(proxyUser, proxyPassword))
.build()
}
}
Šis eskizas naudoja paskyros reikšmes iš slaptos programos konfigūracijos. Apsauga leidžia pirmą bandymą ir sustabdo pasikartojusį. Ji įgyvendina Basic, o ne kiekvieną schemą, kurią tarpinis serveris gali paskelbti; išnagrinėkite iššūkį prieš pasirinkdami tą atsakymą.
Jei galutinis rezultatas išlieka 407, palyginkite pasirinktą tarpinį serverį, paskelbtą schemą ir dokumentuotą paskyros tapatybę. Atmestas slaptažodis, nepalaikomas metodas ir neteisinga vartotojo vardo forma reikalauja skirtingų pataisymų. Saugokite šiuos stebėjimus ir galutinę būseną redaguotoje diagnostikoje.
CONNECT turi kitą atgalinio iškvietimo kontekstą: OkHttp dokumentuoja sintetinį prevencinį tarpinio serverio autentifikavimo iššūkį prieš atidarant tunelį. Tvarkykite tą kontekstą pagal API, o ne manykite, kad kiekvienas atgalinis iškvietimas yra įprastas paskirties atsakymas.
Atskiras authenticator skirtas paskirties serverio autentifikavimui. Laikykite jo prisijungimo duomenis atskirai nuo tarpinio serverio prisijungimo; bendras interceptorius, dedantis tarpinio serverio slaptažodį į kiekvieną išeinančią užklausą, gali jį išsiųsti netinkamoje apimtyje.
Istorinės ataskaitos taip pat aprašo įgyvendinimo klaidas, įskaitant atmesto tarpinio serverio atsakymo turinio apdorojimą. Užfiksuokite OkHttp versiją ir paskutinius mainus prieš priskirdami dabartinę klaidą senai ataskaitai. Pakartojimo sprendimas vis tiek turėtų sustabdyti nepakeistą prisijungimo duomenų bandymą, neturintį jokio naudingo naujo atsakymo.