Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Arno Welzel Newsgroups: de.comp.lang.javascript Subject: Re: Authorization: Bearer in "normalem" GET Request Date: Sat, 6 Aug 2022 10:35:51 +0200 Lines: 62 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net vYOajBnTlNNTWpGqLf02igW5lpsUgCXNqBFBqWIu6TPUUlkvIM Cancel-Lock: sha1:mFPtNV32n74Zcm+wbq0qZHdUPkc= Content-Language: de-DE In-Reply-To: Xref: csiph.com de.comp.lang.javascript:5318 Peter J. Holzer, 2022-08-05 13:48: > On 2022-08-05 08:46, Arno Welzel wrote: >> Peter J. Holzer, 2022-08-05 10:01: >>> Naja, bei Basic Authentification fragt der Browser ja auch nicht >>> jedesmal den User, wenn er ein 401 bekommt, sondern merkt sich die >>> (Hostname, Realm, Username, Passwort)-Tupel. Das könnte er auch für >>> Bearer Authentification machen, das Problem hier ist aber, dass der >>> Input dafür vom Server kommt (ein Bearer-Token ist üblicherweise ein JWT >>> oder sonst ein signierter Blob) und nicht vom User. Man bräuchte also >>> die Möglichkeit, das programmatisch entweder präenptiv oder über einen >>> Callback zu setzen. >> >> Genau das meine ich ja - man kann den Authorization Header nicht senden, >> ohne ihn vorher vom Server anzufordern. > > Äh, den Authorization Header fordert der Server an, indem er mit 401 > antwortet. Der Browser sendet dann den Request ein zweites Mal, Dann reden wir von zwei verschiedenen Dingen. Ich dachte, es ging um das Token, was per API angefordert wird und *danach* als Authorization Header gesendet wird - also jedesmal etwas anderes. [...] > wird). Bei einem Bearer Token ist das nicht praktikabel, das muss vom > Programmcode gesetzt werden können. Eben - das meinte ich ja! >>> Der Code sieht jetzt übrigens so aus: >>> >>> axios.get(endpoint, options) >>> .then((res) => { >>> const blob = new Blob([res.data], {type: res.headers["content-type"]}) >>> const url = window.URL.createObjectURL(blob); >>> const link = document.getElementById("download"); >>> link.href = url; >>> link.click(); >>> }) >> >> D.h. jeder Angreifer kann sich den Authorization Header einfach anhand >> des frei zugänglichen Code in seinem Browser per Web Developer-Console >> einfach abgreifen? Oder ist das Code, den nur Benutzer zu sehen >> bekommen, die sich vorher schon anderweitig authentifizieren mussten? > > Ich verstehe die Frage nicht ganz. Der Benutzer loggt sich ein, und Die Frage ist, ob der oben gezeigte Code *ohne* vorherige Anmeldung benutzt wird oder nicht. > bekommt ein Token. Dieses Token wird bei jedem Request in Form eines > Authorization Headers mitgeschickt. Das Code-Snippet hier wird > ausgeführt, wenn der User schon eingeloggt ist. Ja - das meinte ich. Wenn der Code ohnehin erst dann *nach* Anmeldung benutzt wird, dann ist es selbstverständlich kein Problem. -- Arno Welzel https://arnowelzel.de