web-dev-qa-db-fra.com

Partage de ressources d'origine croisée avec des informations d'identification

J'ai un formulaire d'authentification commun pour plusieurs sous-domaines (exemple.com, blog.example.com et app.example.com). Le formulaire de connexion doit envoyer ces données à example.com quel que soit l'endroit où elles sont affichées. J'ai donc pensé à utiliser CORS, mais ceci:

header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com")

ne marche pas

J'ai donc pensé à la chose suivante: vérifier manuellement l'en-tête Origin côté serveur et autoriser un Access-Control-Allow-Origin: * afin que des demandes puissent être effectuées. Malheureusement, cela se produit dans le MDN

Remarque importante: lorsqu'il répond à une demande avec informations d'identification, le serveur doit spécifier un domaine et ne peut pas utiliser de caractère générique. 

Existe-t-il un moyen de faire en sorte que ma demande concerne plusieurs domaines tout en continuant d'envoyer des informations d'identification à l'aide de CORS?

27
Nemo

Deux pensées:

1) incluez-vous également l'en-tête "Access-Control-Allow-Credentials: true"? Cela est nécessaire pour transmettre les informations d'identification du cookie (et le client XHR correspondant doit définir .withCredentials = true)

2) Avez-vous essayé la suggestion de votre lien et incluez seulement l'origine pour la demande actuelle. Par exemple, si une requête arrive avec l'en-tête "Origine: http://blog.exemple.com ", vous répondrez avec "Accès-Contrôle-Autoriser-Origine: http: // blog. example.com "et non une liste d'origines. Cela nécessite un peu plus de travail sur votre implémentation côté serveur.

3) Une autre pensée, vous mentionnez que vous avez un formulaire de connexion unique qui doit être partagé par différents domaines. Eh bien, s’il s’agit d’un formulaire HTML standard, vous pouvez effectuer une publication de formulaire régulière sur plusieurs domaines. Vous n'avez pas besoin d'utiliser CORS. Il suffit de définir la propriété "action" du formulaire sur l'URL sur laquelle vous souhaitez publier. Par exemple:

<form name="login" action="http://login.example.com/doLogin">
40
monsur
// cross domain
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_Origin']);
header('Access-Control-Allow-Credentials: true');
1
user3986068