Ankündigung

Einklappen
Keine Ankündigung bisher.

CORS Authorization-Header probleme

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CORS Authorization-Header probleme

    Hallo,

    Da ich nun nach mehreren Tagen auf Google und StackOverflow das ganze nicht lösen konnte wende ich mich nun an die Community im Forum.

    Ich arbeite aktuell an einer API für meine Angular-App und habe nun das Problem dass wenn ein "Authorization" Header gesezt ist, ich einen CORS Fehler bekomme.
    Wenn ich den Header entferne bekomme ich wie zu erwarten einen 401 Fehler.

    CORS habe ich wie folgt eingebaut und funktioniert (ohne Header):
    .htaccess
    Code:
    <IfModule mod_headers.c>
        Header always set Access-Control-Allow-Origin "*"
        Header always set Acces-Conrtol-Allow-Methos "GET, POST, PUT, DELETE, OPTIONS"
        Header always set Access-Conrtol-Allow-Headers "origin, x-request-with, content-type, accept"
        Header always set Access-Control-Allow-Credentials "true"
    </IfModule>
    In den PHP Dateien:
    PHP-Code:
    if(isset($_SERVER['HTTP_ORIGIN'])) {
            
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
            
    header('Access-Control-Allow-Credentials: true');
            
    header('Access-Control-Max-Age: 0');    // no cache
        
    }

        
    // Access-Control headers are received during OPTIONS requests
        
    if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

            if (isset(
    $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
                
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PATCH");        

            if (isset(
    $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
                
    header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

            exit(
    0);
        } 
    Die Console (Firefox) gibt mir folgende Meldung:
    Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource. (Grund: Kopfzeile 'authorization' ist aufgrund der Kopfzeile 'Access-Control-Allow-Headers' aus der CORS-Preflight-Antwort nicht zulässig).
    Meine erste Vermutung war das im angegebenen API-Key ein Slash enthalten ist, aber funktioniert leider auch nicht wenn ich als Key den Wert "123" angebe.

    Anhand der Fehlermeldung vermute ich nun das es daran liegt dass das Preflight OPTIONS-Request keine Header akzeptiert, und habe desshalb mal folgenden Code in die .htacces gepackt um alle Preflight-Request mit dem Statuscode 200 zu beantworten:
    Code:
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
    Bin über jeden Tipp dankbar.

  • #2
    Viel hilft viel? Die .htaccess ist voll mit Tippfehlern und in PHP machst du das selbe nochmal in grün. Entscheid dich wie und wo du das steuern willst. Die Fehlermeldung ist ziemlich eindeutig... in Access-Control-Allow-Headers muss Authorization mit aufgeführt sein.

    Kommentar


    • #3
      Zitat von erc Beitrag anzeigen
      Viel hilft viel? Die .htaccess ist voll mit Tippfehlern und in PHP machst du das selbe nochmal in grün. Entscheid dich wie und wo du das steuern willst. Die Fehlermeldung ist ziemlich eindeutig... in Access-Control-Allow-Headers muss Authorization mit aufgeführt sein.
      Tut mir leid für die verwirrung.
      Ich verwende aktuell nur den code in der htaccess. Den php code hatte ich füher mal und dachte vielleicht war da auch schon der Fehler.

      Das ich den Header setzen muss ist mir klar und das mache ich auch.

      Da ich den Header umbenannt habe hier nochmal der aktuell verwendete code:
      .htaccess
      Code:
      <IfModule mod_headers.c>
          Header always set Access-Control-Allow-Origin: "*"
          Header always set Acces-Conrtol-Allow-Methos: "GET"
          Header always set Access-Conrtol-Allow-Headers: "api-key, content-type"
      </IfModule>
      
      RewriteEngine On
      RewriteCond %{REQUEST_METHOD} OPTIONS
      RewriteRule ^(.*)$ $1 [R=200,L]
      Hier ein Screenshot der zeigt dass der Header gesetz ist:
      Bildschirmfoto 2021-01-06 um 00.07.00.png

      Fehlermeldung nach wie vor die selbe nur dass der Header nun mit "api-key" bennant ist.

      Kommentar


      • #4
        Brauchst du eine Brille?

        Code:
        Header always set Access-Control-Allow-Origin: "*"
        Header always set Acces-Conrtol-Allow-Methos: "GET"
        Header always set Access-Conrtol-Allow-Headers: "api-key, content-type"
        Der eine Tippfehler springt doch direkt ins Auge. Dort fehlt ein s und es ist control und nicht conrtol. Schau dir den Screenshot von Firefox an. Die Header mit dem Fragezeichen davor kennt Firefox, die Header ohne sind entweder custom oder was faul...

        Kommentar


        • #5
          Zitat von erc Beitrag anzeigen
          Brauchst du eine Brille?

          Code:
          Header always set Access-Control-Allow-Origin: "*"
          Header always set Acces-Conrtol-Allow-Methos: "GET"
          Header always set Access-Conrtol-Allow-Headers: "api-key, content-type"
          Der eine Tippfehler springt doch direkt ins Auge. Dort fehlt ein s und es ist control und nicht conrtol. Schau dir den Screenshot von Firefox an. Die Header mit dem Fragezeichen davor kennt Firefox, die Header ohne sind entweder custom oder was faul...
          Oh mein Gott ist das peinlich

          Kommentar


          • #6
            Und wenn wir grade dabei sind... es ist auch nicht methos sondern methods. Aber dank dem Fragezeichen hast du das bestimmt selbst rausgefunden.

            Kommentar

            Lädt...
            X