2017-05-25 3 views
0

J'ai une situation dans laquelle j'essaie d'utiliser un seul cookie d'authentification Http-Only à travers les sous-domaines.Les cookies partagés peuvent-ils être envoyés dans des sous-domaines?

J'ai vérifié que la réponse d'authentification définit le cookie, je vois le domaine dans la réponse comme .mondomaine.com. Si j'ouvre la visionneuse de cookies dans Chrome (Paramètres -> Afficher les paramètres avancés -> Paramètres du contenu -> Tous les cookies et les données du site ...) je vois mon cookie auth stocké sous mydomain.com (pas d'indication '.').

Cependant, quand je fais simple demande de retourner à mon serveur auth pour obtenir un jeton d'autorisation complète, le cookie d'authentification n'est pas envoyé:

//Sent from http://app.mydomain.com 
$.get('http://auth.mydomain.com', null, function(fullAuthorizeTok) {}); 

Est-il impossible d'envoyer des cookies même dans une croix sous -domaine demande comme ça? J'utilise un cookie d'authentification Http-Only pour protéger contre les attaques XSS, puis utiliser un jeton d'autorisation soumis manuellement sur des opérations puissantes pour se protéger contre les attaques XSRF. Ce bit est la partie où l'application a déjà été authentifiée et demande un jeton d'autorisation du serveur, et je préférerais que cela soit possible à partir du client JS.

Répondre

0

La requête doit être explicitement interdomaine pour que les cookies soient envoyés. Je pensais que le navigateur enverrait implicitement des cookies à travers les sous-domaines s'ils étaient partagés entre lesdits sous-domaines, mais ce n'est pas le cas. La demande doit ressembler à ceci:

$.ajax({ 
    url: 'http://auth.mydomain.com', 
    method: 'GET', 
    crossDomain: true, 
    data: {}, 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function (tokenStr) { 
     //Do Stuff 
    }, 
    error: function (jqXHR, type, exception) { 
     alert('Oh Dear.'); 
    } 
}); 

Et bien sûr, la réponse devrait inclure les en-têtes CORS appropriés.

En note. Cela ne fonctionne pas entre les domaines s'ils ne partagent pas le même domaine parent. Vous pouvez donc envoyer un cookie de 'app.mydomain.com' à 'auth.mydomain.com', mais pas à 'auth.mydomain2.com'.