it-swarm.com.de

API mit Cookie holen

Ich probiere die neue Fetch API aus, habe aber Probleme mit Cookies. Insbesondere gibt es nach einer erfolgreichen Anmeldung einen Cookie-Header in zukünftigen Anforderungen, aber Fetch scheint diese Header zu ignorieren, und alle meine mit Fetch gestellten Anforderungen sind nicht autorisiert.

Liegt es daran, dass Fetch noch nicht fertig ist oder Fetch mit Cookies nicht funktioniert?

Ich baue meine App mit Webpack. Ich verwende Fetch auch in React Native, das nicht dasselbe Problem hat.

161
Khanetor

Beim Abrufen wird standardmäßig kein Cookie verwendet. So aktivieren Sie das Cookie:

fetch(url, {
  credentials: "same-Origin"
}).then(...).catch(...);
247
Khanetor

Zusätzlich zu @ Khanetors Antwort für diejenigen, die mit Cross-Origin-Anfragen arbeiten: credentials: 'include'

Beispiel für eine JSON-Abrufanforderung:

fetch(url, {
  method: 'GET',
  credentials: 'include'
})
  .then((response) => response.json())
  .then((json) => {
    console.log('Gotcha');
  }).catch((err) => {
    console.log(err);
});

https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

147
zurfyx

Habe gerade gelöst. Nur zwei f. Tage der Brutforce

Für mich war das Geheimnis folgendes:

  1. Ich habe POST/api/auth angerufen und festgestellt, dass Cookies erfolgreich empfangen wurden.

  2. Rufe dann GET/api/users/mit credentials: 'include' auf und erhalte 401 Unauth, da keine Cookies mit der Anfrage gesendet wurden.

Der Schlüssel ist, credentials: 'include' auch für den ersten/api/auth-Aufruf zu setzen.

23
user1671599

Wenn Sie dies 2019 lesen, ist credentials: "same-Origin" der Standardwert.

fetch(url).then
5
alextrastero

Fügen Sie hier einfach die richtigen Antworten für .netwebapi2 Benutzer hinzu.

Wenn Sie cors verwenden, weil Ihre Client-Site von einer anderen Adresse aus als Ihre webapi bedient wird, müssen Sie auch SupportsCredentials=true in die serverseitige Konfiguration aufnehmen.

        // Access-Control-Allow-Origin
        // https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-Origin-requests-in-web-api
        var cors = new EnableCorsAttribute(Settings.CORSSites,"*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
0
Mark Dornian