Condividi un cookie tra due siti Web

Ho creato un sito Web (A) che accede e recupera i dati dei clienti da un servizio Web separato.

L’organizzazione che possiede (A) ha anche un sito web (B) che ha un modulo web. Vogliono un cliente registrato su (A) per poter fare clic su across (B) e vedere un modulo precompilato con i loro dettagli.

Ciò significa che (A) deve scrivere il proprio ID cliente su un cookie, che (B) può leggere, e quindi (B) può richiedere i dati dal servizio Web e precompilare il modulo.

Questo solleva due domande:

  1. Il sito web (B) può leggere il cookie per il sito web (A)?

  2. In tal caso, per impedire a qualcuno di modificare un cookie e vedere i dati di altre persone nel modulo, avrei bisogno di fare qualcosa come criptare il cookie su (A) e poi farlo decrittografare in (B) – qualche suggerimento lungo questa linea?

Non riesco a modificare l’accesso esistente in OAuth o qualcosa del genere, poiché il servizio web viene utilizzato da diversi altri siti, quindi non può essere modificato.

No. Il sito web B non può leggere un cookie dal sito web A.

La soluzione più semplice consiste nel trasferire le informazioni di accesso / credenziali dal sito Web A al sito Web B e fare in modo che il sito Web B imposti un cookie separato. Ad esempio, dopo aver effettuato l’accesso al sito Web A, è ansible reindirli rapidamente al sito Web B con una query quer crittografata. Il sito Web B potrebbe quindi leggere le informazioni, impostare il proprio cookie e redirect l’utente al sito A.

È disordinato ma ansible.

Hai detto che la stessa azienda possiede entrambi i siti. Come sospetti, se i siti hanno lo stesso dominio come http://www.mycompany.com e store.mycompany.com, possono condividere i cookie. L’intestazione della risposta HTTP sarebbe simile a questa:

Set-Cookie: user_id=1295214458; Path=/; Domain=.mycompany.com 

Poiché il cliente ha accesso diretto a questi dati, è necessario includere anche una firma in modo che venga rilevata la manomissione. Di solito il tutto è crittografato e firmato in un “token”, e viene impostato come cookie. Ma tecnicamente, è richiesta solo la firma.

Se nel tuo caso tutti i tuoi utenti utilizzano browser con supporto HTML5, puoi utilizzare il metodo window.postMessage che consente di addEventListener su un lato e postMessage dall’altro. Ecco un bell’articolo / esempio: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage .

Quindi i passaggi sono semplici:

  1. aggiungi al sito A un iframe nascosto per il sito B
  2. invia il cookie di B a A utilizzando window.postMessage
  3. memorizzare il cookie ricevuto nel cookie di A

I cookie sono accessibili solo a un singolo dominio a cui sono impostati.

Credo che se si utilizzano due sottodomini nello stesso dominio sarebbe ansible condividere i cookie, tuttavia il browser non invia i cookie impostati su un dominio a nessun altro.

Modifica: vuoi anche evitare di memorizzare grandi quantità di dati in un cookie. C’è forse la possibilità di creare una API che il sito B possa interrogare con javascript?

Potenziale soluzione: è ansible utilizzare una cornice incorporata nel sito secondario per mostrare il contenuto del sito primario (occupando l’intera finestra):

    your page title    
TESTING

Ci sono strumenti open source su internet che possono farlo, ma questo è contro l’idea alla base della filosofia dei cookie. I cookie devono essere accessibili solo da un dominio. Puoi comunque prendere in giro quel dominio e “Hack” nel browser. Non è raccomandato e alcuni browser hanno una sicurezza più stretta e non lo consentono.

Ti suggerisco di creare un servizio web nel sito A e di dare accesso alla lettura a B per leggerlo.