Ci è stato affidato il compito di implementare una dashboard contenente più widget. La dashboard stessa e tutti i widget devono accedere a varie API protette. Il nostro protocollo di autorizzazione è OpenID.
Attualmente, la dashboard richiede un access_token
con tutti i scope
s richiesti da tutti i widget. I widget utilizzano questo access_token
condiviso per effettuare richieste per proteggere le API.
Il problema è che, poiché questo access_token
condiviso ha così tanti ambiti, è troppo "potente". Siamo preoccupati che utilizzando questo token condiviso, i widget e le API possano avere più diritti di quelli a cui hanno diritto. Idealmente vorremmo che ogni widget avesse un access_token
separato con il proprio scope
.
Non sono sicuro di come ottenere ciò. Se ogni widget richiede il proprio access_token
, l'utente verrà reindirizzato all'endpoint di autorizzazione più volte. Questo è inaccettabile per motivi di UX.
Abbiamo preso in considerazione il wrapping dei widget in iframe
s. Così ogni widget può reindirizzare all'interno del proprio frame senza influenzare il dashboard. Tuttavia, poiché vengono eseguiti tutti nello stesso dominio, possono sempre accedere a access_token
s di altri widget (perché sono memorizzati in LocalStorage
), quindi non sono sicuro che sia meglio dal punto di vista della sicurezza.
Come possiamo architettare il sistema di autorizzazione in una dashboard in modo che tutti i widget abbiano il loro access_token
s?