web-dev-qa-db-fra.com

Erreur CORS - Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée.

J'utilise un frontal Angular pour me connecter à un backend Web 2 API. Le cas d'utilisation qui échoue est le suivant. Lorsqu'un utilisateur s'inscrit, il doit être connecté au système et redirigé vers une nouvelle page pour collecter des informations supplémentaires. J'utilise TOKENS pour l'authentification. 

J'ai activé CORS dans la configuration WebAPI:

 var cors = new EnableCorsAttribute("http://localhost:7812", "*", "*");
        config.EnableCors(cors);   

La demande d'enregistrement est acceptée et les en-têtes de réponse possèdent les en-têtes CORS requis:

**Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:7812**
Content-Length:0
Date:Sun, 24 Aug 2014 09:31:55 GMT
Server:Microsoft-IIS/8.0
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcUHJvamVjdHNcVGVzdGluZ1xNYWx0QXBhcnRtZW50c1xNYWx0YXBhcnRtZW50cy5BUElcTWFsdGFwYXJ0bWVudHMuQVBJXGFwaVxhY2NvdW50XHJlZ2lzdGVy?=

Dans l'étape suivante, j'essaie de connecter l'utilisateur au système. Dans le cadre de la connexion, le serveur demande un jeton au serveur à l'adresse Request URL:http://localhost:7802/token. L'en-tête de requête envoie à nouveau un en-tête d'origine Origin:http://localhost:7812 mais cette fois, je reçois l'erreur: XMLHttpRequest cannot load http://localhost:7802/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7812' is therefore not allowed access.

Quelqu'un a des idées?

8
Greg

Lors de l'utilisation de CORS, nous devons garder à l'esprit qu'il peut y avoir deux demandes envoyées par les navigateurs pour une demande non GET. Il y a généralement la demande de contrôle en amont (OPTIONS), puis la demande réelle (POST). Lors des requêtes de contrôle en amont, le serveur doit ajouter l'en-tête Access-Control-Allow-Origin avec la valeur correspondant à l'en-tête request Origin . Ceci autorise l'envoi de la demande ultérieure. 

Pour la requête suivante/réelle, le serveur doit également ajouter l'en-tête Access-Control-Allow-Origin . Sinon, cette requête échoue. 

Lorsque vous utilisez OWIN OAuthAuthorizationServerProvider, vous devez personnaliser le gestionnaire MatchEndpoint pour gérer la logique d'en-tête. Ce gestionnaire est exécuté avant de valider l'authentification du client.

Pour plus d'informations de base, consultez ce lien: http://www.ozkary.com/2016/04/web-api-owin-cors-handling-no-access.html

3
ozkary
1
wilver

Utilisez ces lignes dans web.config :

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
    ...
  </modules>
  <handlers>
    <remove name="WebDAV" />
    ...
  </handlers>
</system.webServer>

Cela corrige mon problème, peut-être qu’il vous aidera également. 

0
fsm3xpert

Je crois que vous avez deux problèmes:

1- Avec Web API 2, vous devez ajouter l'en-tête manuellement lorsque vous accordez le jeton au porteur.

2- Vos données doivent être encodées en url, vous devez donc intercepter le message $ http post pour encoder les données.

reportez-vous à mon article sur l'utilisation de Web API 2 à partir d'un client AngularJS.

http://www.codeproject.com/Articles/742532/Using-Web-API-Individual-User-Account-plus-CORS-En

J'espère que cela pourra aider.

0
Omar.Alani