2017-05-01 8 views
1

Ich habe ein Problem für nicht in der Lage Cookie im Cross-Domain-Szenario gesetzt werden.CORS Set Cookie funktioniert nicht

Zunächst einmal möchte ich beschreiben, wie Sie mein Szenario war. Grundsätzlich habe ich 3 Client-Plattform, die Web, iOS, Android sind. Diese 3 Plattformen würden mit meinen Backend-Endpunkten kommunizieren.

Für diese Frage bezieht sich nur auf Web und Backend. Web und Backend befinden sich in einer anderen Domäne.

Mein Web (React JS) würde als http://webdomain1.com hosten. Mein Auth Endpunkt (Frühjahr Boot-Anwendung) würde als http://backenddomain1.com Host und Listening-Port 8080

Ich bin mit Chrom http://webdomain1.com durchsuchen und versuchen, die Authentifizierung Benutzername und Passwort über Ajax http://backenddomain1.com und Backend Web würde ausgeben Token zu senden. Die Antwort würde "Set-Cookie" antworten und das Token in Cookie setzen. Ich sehe jedoch nicht, dass der Cookie in http://webdomain1.com gesetzt wird, indem er von Chrome-Entwicklertools untersucht wird.

Hier ist meine Ajax-Code:

axios({ 
      method:'post', 
      url: 'http://backenddomain1.com/auth/rentilife/authenticate', 
      data: this.loginModel, 
      withCredentials: true, 
      headers: {'X-Requested-With': 'XMLHttpRequest'} 
     }).then((response) => { 
      document.cookie="test=value"; 
     }).catch(function (error) { 
      //console.log(error); 
     }); 

Und unter meinem Backend-Code:

@Configuration 
@EnableWebMvc 
public class WebConfiguration extends WebMvcConfigurerAdapter{ 

    @Value("${allowed.origin.domains}")  
    private String[] allowedOriginDomains; 

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

Und die Antwort-Header wie folgt:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://webdomain1.com 
Content-Type:application/json;charset=UTF-8 
Date:Mon, 01 May 2017 11:34:17 GMT 
Set-Cookie:XA=eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhMWN8Y2h1YW5ob3I4NUBnbWFpbC5jb20iLCJpc3MiOiJnYWdlc2lzLmNvbSIsImV4cCI6MTQ5MzY0MjA1OCwiaWF0IjoxNDkzNjM4NDU4LCJ1c2VybmFtZSI6aGAZ21haWwuY29tIn0.OGVpymzgOzoLhjdhJS6OMbYnCB1NhwfVxCP7E8dxSahKYZvE5lZBrMBN5xgylOZoOWLHRB0C28j2Ps6zO1s7KF_KuNI6lPn1hU2oCjGZkp4X2HGj1rPBhmB7jy5oXpBB0GZDu8HV5u-HeVh2HfDH1KaCw-pJdPH66y0e6ugJghR36StqfrphTu1ideSjsWgN7BTpVip_uVP8aDKjVLZsQjnntlVLqrrEt0wutn10xXDs5d_pULi3wn0s18IPQFWA9iiC0d8s5hNk-AdVKmMhD9wQrczxYoPO5WqKIf5SFFKHa7bYJPUNJ6mSw6zshS1Bnj1cn_joJ8wo9mKQr05Lhw;domain=webdomain1.com;path=/ 
Transfer-Encoding:chunked 
Vary:Origin 
X-Application-Context:gateway:8080 

Request-Header:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate 
Accept-Language:en-GB,en;q=0.8,en-US;q=0.6,la;q=0.4 
Connection:keep-alive 
Content-Length:57 
Content-Type:application/json;charset=UTF-8 
Host:backenddomain1.com:8080 
Origin:http://webdomain1.com 
Referer:http://webdomain1.com/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
X-Requested-With:XMLHttpRequest 

Ich suche nach Führung. Schätze, wenn jemand helfen könnte.

+0

Session-Cookies (was ich denke, Sie versuchen zu tun) werden nur auf der gleichen Domain verwendet. Was Sie beschreiben, ist mehr mit dem Bearer-Token-Weg verbunden, Dinge zu tun. Schaut euch https://oauth.net/2/ –

Antwort

1

Sie können keine Cookies für eine andere Domain, da es ein großes Sicherheitsproblem zu tun, so wäre.
In Ihrem Fall wäre die erste Lösung für http://webdomain1.com, eine Anfrage an Ihre API zu senden und den Cookie aus der Antwort hinzuzufügen. Dies ist erforderlich, wenn Sie das Cookie auf Ihrer Website wirklich benötigen.
Es kann möglich sein, die Cookie-Informationen von den Kopfzeilen zu lesen, aber ich bin mir nicht sicher.

Beispielantwort:

{ 
    'auth':'Success', 
    'cookieName':'yourCookie', 
    'cookieValue':'eatoinshruldu' 
} 

Dadurch wird Ihre verschiedenen Backends ermöglichen, ihre eigenen Lösungen für Authentifizierung und Sicherheit umzusetzen.


Die andere Option ist die Berechtigungen und Auth-Kontrollen auf Ihrer API-Domain nur, auszuführen und damit den Cookie gesetzt auf dieser Domain statt Ihrer Webseite ein.

+0

an Sieht aus wie die Arbeit um nur Cookies auf der Javascript-Seite zu setzen, wenn sie die Antwort bekommen. Genau, ich werde die Berechtigung für die zugreifende Authentifizierung implementieren. – A1ucard