La migliore strategia per OAuth2.0 tra browser e schede all'interno dello stesso browser?

2

Ho sviluppato un sistema di accesso utilizzando OAuth2.0 che attualmente funziona in una scheda in un browser. Senza immergersi nel codice, il sistema funziona facendo in modo che l'utente inserisca le proprie credenziali per accedere, le credenziali vengono inviate all'API (WebAPI2 .Net) dal client (Angolare), l'utente è connesso tramite Active Directory e quindi un token di accesso e un token di aggiornamento vengono restituiti al client.

Attualmente sto memorizzando questi all'interno dei cookie. Quando un token di accesso scade, il token di aggiornamento viene prelevato dal cookie e utilizzato per ottenere un nuovo token di accesso. Tutto ciò funziona all'interno di una scheda del browser. Tuttavia, vogliamo consentire all'utente di accedere a più schede all'interno di un browser e / o a più browser contemporaneamente senza effettuare effetti reciproci (come Facebook, ecc.) I cookie sono la soluzione sbagliata per l'archiviazione di questi token perché non fanno 'comunicare tra diverse schede, quindi ho fatto qualche ricerca e ho trovato localStorage che probabilmente risolve il problema tra le schede.

Tuttavia, volevo ottenere alcune opinioni sulla migliore strategia per l'accesso su più schede / browser con lo stesso accesso utilizzando OAuth2. Non penso che tu possa memorizzare i token in SQL perché la chiamata all'API non è sicura per ottenere i token di aggiornamento attraverso i browser. Crei token separati in ogni browser con lo stesso login e quindi localStorage in ciascun browser per condividere il token del browser? O c'è un modo per condividere i token di aggiornamento in sicurezza su più browser?

    
posta Kevin Quiring 19.10.2017 - 01:06
fonte

1 risposta

0

Tra schede, utilizza defineProperty e sessionStorage :

Object.defineProperty(sessionStorage, "setItem", { writable: true });
sessionStorage.setItem = function () { /* Login logic */ };

Tra i browser, usa window.postMessage per comunicare il reindirizzamento necessario alla pagina di autorizzazione:

 // If the current window is the 'parent', change the URL by setting location.href
  if (window.top == window.self) {
    window.top.location.href = "/auth/shopify?shop=myshopname";

  // If the current window is the 'child', change the parent's URL with postMessage
  } else {
    message = JSON.stringify({
      message: "Shopify.API.remoteRedirect",
      data: { location: window.location.origin + "/auth/shopify?shop=myshopname" }
    });
    window.parent.postMessage(message, "https://myshopname.myshopify.com");
  }

Riferimenti

risposta data 16.08.2018 - 21:17
fonte

Leggi altre domande sui tag