web-dev-qa-db-fra.com

Facteur résolvant une "demande CORS non valide" pour une demande POST Request

Je viens tout juste de commencer à utiliser Postman pour tester une API à laquelle je m'intègre.

J'ai l'erreur suivante qui continue à apparaître

Demande CORS invalide

Notez les points suivants:

  1. L'API utilise l'authentification de jeton du porteur (OAuth2). Je travaille sans problème.
  2. J'obtiens le jeton porteur avec succès, l'assigne à une variable d'environnement, puis tente de l'utiliser pour les opérations RESTful.
  3. Le problème provient de l'opération RESTful ultérieure qui utilise le jeton.
  4. Lorsque j'utilise un ancien jeton (via une opération POST)), il me dit à juste titre qu'il a expiré et n'est pas autorisé.
  5. Lorsque j'en génère un nouveau et que j'essaie d'exécuter l'appel reposant, cela me donne le Invalid CORS request Erreur.
  6. En utilisant cURL, je n'ai aucun problème. Mais je suis frustré par Postman .

Ce que j'ai trouvé jusqu'à présent:

  1. tilisation de postman avec Http POST demandes Je ne vois pas la partie en gras

Juste au cas où quelqu'un aurait le même problème, voici comment le résoudre. Allez à https://www.getpostman.com/docs/capture dans votre chrome navigateur). Cliquez sur l'extension d'intercepteur, puis choisissez ajouter à chrome. Une fois que c'est ajouté, il y a une nouvelle icône en haut à droite du navigateur et du facteur qui ressemble à un feu de signalisation. Dans le facteur, cliquez dessus et il devient vert. Ajoutez ensuite un en-tête à chaque demande adressée à troisième lumière. Chaque en-tête est composé du nom de l'en-tête et d'une valeur. Commencez à taper sur le nom de l'en-tête et une liste d'en-têtes http autorisés s'affiche. Choisissez "Origine". Dans la cellule correspondant à la valeur, tapez simplement le signe l'URL complète de votre serveur. (N'oubliez pas le 'http: //' ou 'https: //') .

  1. Quelle est la réponse attendue à une demande CORS invalide? - Meilleure explication que j'ai vue jusqu'à présent sur les erreurs CORS.

L'autre matériau parle de Access-Control-Allow-Method header, preflight requests

... et il existe un organigramme illustrant Apache Tomcat du flux CORS.

enter image description here

16
user919426

Voici la réponse que vous avez trouvée à nouveau:

Juste au cas où quelqu'un aurait le même problème, voici comment le résoudre. Allez à https://www.getpostman.com/docs/capture dans votre chrome navigateur). Cliquez sur l'extension d'intercepteur, puis choisissez ajouter à chrome. Une fois que c'est ajouté, il y a une nouvelle icône en haut à droite du navigateur et du facteur qui ressemble à un feu de signalisation. Dans le facteur, cliquez dessus et il devient vert.

... Avec le bit en gras traduit:

Ajoutez ensuite un en-tête à votre demande. La clé d'en-tête doit être "Origine" et la valeur d'en-tête doit être l'URL complète de votre serveur (n'oubliez pas le http:// ou https://).

Notez que Chrome/Postman ne vous permettra pas d'ajouter un en-tête avec une clé d'origine sans le plugin Interceptor.

Notez également qu'au moins sur mon système, l'icône Interceptor ne ressemble plus à un feu de signalisation.

22
Jeff Morriss

Si votre code côté service principal recherche l'origine de la demande (juste pour éviter une attaque CORS), vous pouvez être confronté à ce problème lors du test de votre API Rest par le biais de postman.

Comment résoudre ce problème??

Vous devez installer un Chrome appelé Postman Interceptor ( https://chrome.google. com/boutique en ligne/détail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo? hl = en ).

Après avoir installé avec succès ce plugin, dans votre client Postman, vous pouvez voir une petite icône appelée Postman Interceptor. Vous devez l'activer/désactiver pour l'activer.

Maintenant, vous pouvez ajouter un en-tête de requête comme ci-dessous

RequestHeader Key "Origin" RequestHeader Value "URL de votre base d'application"

Cochez cette image

Maintenant, vous devriez être capable de surmonter les problèmes de la SCRO auxquels vous faites face.

6
puneetShanbhag

Il semble que notre serveur voie dans un manuel de Postman HTTP POST que la source est invalide car elle provient de Postman sous la forme "chrome-extension: // fhbjgbiflinjbdggehcddcbncdddomop"

Vous ne savez pas pourquoi ni comment résoudre le problème du côté client/facteur. Il semble que notre serveur le rejette correctement tel quel et émet un 403.

0
bjm88

La valeur de l'en-tête "Origin" définie dans la requête Postman doit être autorisée dans le backend de l'API. Par exemple, l’utilisation de Spring Boot for API devrait avoir la suite:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Value("${cors.allowedOrigins}")
    private String allowedOrigins;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins(allowedOrigins)
            .allowedMethods("*")
            .allowedHeaders("*");
    }

}

où allowedOrigins est défini à l'aide de application.properties propriété cors.allowedOrigins ayant une liste des origines autorisées, séparées par des virgules, par exemple:

cors.allowedOrings=http://localhost:8080,http://example.com

et définissez la valeur "Origine" dans Postman sur n'importe quelle URL de cors.allowedOrigins

0
Oleksandr Tsurika