Potrà utilizzare questo articolo per proteggere gli URL esterni utilizzati dalle Sue estensioni "custo-manifest". Scoprirà come dichiarare i domini attendibili, configurare il CORS o l’accesso alla rete locale quando necessario e individuare le richieste bloccate.
Panoramica
Le estensioni con manifesto personalizzato possono accedere a URL esterni: chiamate alle API REST, applicazioni web incorporate in un frame Rainbow o caricamento di contenuti dinamici. Per controllare quali server di terze parti possano essere contattati, Rainbow applica un elenco di domini attendibili configurato nella console di amministrazione di Rainbow.
Qualsiasi dominio non dichiarato in tale elenco viene bloccato. A seconda del tipo di estensione coinvolta, il blocco si manifesta in modo diverso: ecco perché comprendere questo meccanismo è Essential prima di distribuire un manifesto.
Configurazione dei domini attendibili
L’elenco viene gestito nella console di amministrazione di Rainbow:
Azienda → Informazioni → Personalizzazione → Domini manifest personalizzati
|
|
Console Rainbow — Personalizzazione → scheda Domini del manifesto personalizzato
Aggiunga una voce per ogni origine da autorizzare. Ogni voce deve seguire il seguente formato:
<protocollo>://<dominio>[:<porta>]| Parte | Regole |
| protocollo | https o http — obbligatorio |
| dominio | Nome host esatto o carattere jolly (*.example.com) |
| porta | Facoltativo — ometterlo per le porte standard (443 / 80) |
| Barra finale / | Non consentita — la corrispondenza non verrà individuata |
Esempi validi
| Voce | Corrisponde a |
| https://crm.example.com | https://crm.example.com/any/path |
| https://crm.example.com:8443 | Porta non standard |
| https://*.example.com | Tutti i sottodomini |
| http://192.168.1.100:3300 | Server locale su rete privata |
Esempi non validi
| Voce | Problema |
| crm.example.com | Protocollo mancante |
| https://crm.example.com/ | Barra finale — rifiutato |
| https://crm.example.com/api | Percorso non consentito — dichiarare solo l’origine |
Ambito del dominio attendibile
Il controllo del dominio attendibile si applica in modo coerente agli URL utilizzati dalle estensioni Rainbow su Web e Desktop.
| Campo del manifesto o utilizzo | Impatto del dominio attendibile |
|---|---|
command.url |
Viene verificato per le chiamate REST, la navigazione web e i casi d’uso relativi a file e navigazione che fanno riferimento a un URL. |
on-main-window-actions |
L’URL dell’applicazione incorporata deve essere considerato attendibile, a meno che non venga utilizzato Popup: true. |
adaptiveCardSubmitUrl |
L’endpoint POST utilizzato da Action.Submit deve essere considerato attendibile. |
urlConfig |
Gli URL di configurazione utilizzati dai widget o dalle applicazioni incorporate devono essere attendibili. |
Impatto sulle chiamate all’API REST
Le estensioni che richiamano un’API REST (commandType: "rest") passano attraverso il browser. Si applicano due livelli di sicurezza indipendenti:
Verifica del dominio attendibile (lato Rainbow)
Se l’origine del server REST non è dichiarata nella console Rainbow, Rainbow visualizza un avviso al momento del caricamento del manifesto. Se l’avviso viene ignorato, la chiamata fallirà silenziosamente in fase di esecuzione — all’interno di Rainbow non verrà visualizzato alcun messaggio di errore.
Soluzione: dichiarare l’origine in Azienda → Personalizzazione → Domini del manifesto personalizzato.
CORS (lato server REST)
Anche se il dominio è considerato attendibile da Rainbow, il browser applica comunque le regole CORS. Il server REST deve restituire le seguenti intestazioni nelle proprie risposte:
Access-Control-Allow-Origin: https://web.openrainbow.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, AuthorizationSe non è necessario limitare l’accesso a un’origine specifica, è possibile utilizzare il carattere jolly:
Access-Control-Allow-Origin: *Se il server non restituisce queste intestazioni, il browser blocca la chiamata senza visualizzare alcun messaggio in Rainbow. Se avete il controllo del server, aggiungete le intestazioni CORS. In caso contrario, chiedete al proprietario del server di aggiornare la sua configurazione.
Accesso alla rete locale (LNA)
Se il server REST è in esecuzione su una rete locale o privata (ad es. http://192.168.1.100:3300), il browser potrebbe bloccare la chiamata in base alla politica di accesso alla rete locale.
Quando il browser rileva una richiesta diretta a una rete privata, invia innanzitutto una richiesta OPTIONS di preflight con:
Access-Control-Request-Private-Network: trueIl server deve rispondere aggiungendo Access-Control-Allow-Private-Network: true alle proprie intestazioni CORS:
Access-Control-Allow-Origin: https://web.openrainbow.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Private-Network: trueSe questa intestazione è assente, il browser blocca la richiesta anche se le intestazioni CORS standard sono corrette.
Soluzioni a seconda del contesto:
| Approccio | Quando utilizzarlo |
| Access-Control-Allow-Private-Network: true | Lei controlla il server locale e desidera che funzioni su Rainbow Web |
| Esposizione tramite HTTPS + nome host risolvibile | Implementazione in produzione |
| Riservare l’estensione esclusivamente a Rainbow Desktop | Non ha il controllo del server locale |
Impatto sulle applicazioni integrate
L’estensione on-main-window-actions visualizza un’applicazione web di terze parti all’interno dell’interfaccia di Rainbow. Sono disponibili due modalità a seconda del valore di Popup.
Senza Popup — applicazione all’interno del frame di Rainbow
L’applicazione viene caricata in un <IFRAME> all’interno di Rainbow. Si applicano tre livelli di sicurezza:
Domini attendibili
L’URL dell’applicazione deve essere dichiarato nella console di Rainbow. In caso contrario, il frame viene visualizzato ma la pagina rimane vuota oppure mostra un errore di sicurezza del browser.
CSP / X-Frame-Options dell’applicazione
L’applicazione di destinazione potrebbe a sua volta rifiutarsi di essere incorporata in un iframe:
| Intestazione | Valore tipico | Effetto |
| X-Frame-Options | DENY o SAMEORIGIN | Impedisce l’incorporamento — frame vuoto |
| Content-Security-Policy | frame-ancestors «self» o «none» | Stesso effetto, meccanismo moderno |
Come verificare: Strumenti di sviluppo → scheda Rete → risposta dall’URL dell’applicazione → ispezionare le intestazioni.
Risoluzione: se si ha il controllo sull’applicazione, autorizzare l’origine Rainbow in frame-ancestors. In caso contrario, impostare Popup: true (vedere §3.2).
Flusso SSO / OAuth attraverso un dominio di terze parti
Se l’applicazione utilizza un flusso di autenticazione (SSO, OAuth 2.0, SAML…), il provider di identità (IdP) risiede in genere su un dominio diverso da quello dell’applicazione. Rainbow carica questi reindirizzamenti all’interno dello stesso frame; pertanto, tutti i domini presenti nel flusso devono essere dichiarati:
https://app.example.com ← l’applicazione
https://login.microsoftonline.com ← IdP di Microsoft
https://login.example.com ← il vostro IdP internoCon Popup: true — applicazione in una finestra dedicata
Quando è impostato Popup: true, l’URL si apre in una finestra del browser dedicata, al di fuori del frame di Rainbow. In questa modalità:
- il controllo del dominio attendibile di Rainbow è disabilitato per quell’URL.
- Le restrizioni X-Frame-Options e CSP relative ai frame-ancestors dell’applicazione non sono rilevanti.
- I flussi SSO / OAuth funzionano normalmente nella propria finestra.
"on-main-window-actions": [{
"name": "My App",
"icon": "${custo.path}\\app.png",
"Popup": true,
"command": {
"url": "https://app.example.com/",
"params": "user=${localUser.email}"
}
}]Caso particolare di esecuzione locale
L’esecuzione locale di applicazioni o script con commandType: "file" su Rainbow Desktop non è soggetta alle restrizioni CORS del browser, all’accesso alla rete locale né alle intestazioni di sicurezza degli iframe.
Problemi comuni e risoluzione dei problemi
Viene visualizzato un avviso durante il caricamento del manifesto
Il manifesto fa riferimento a uno o più URL la cui origine non è dichiarata nella console.
Soluzione: aggiunga l’origine mancante in Azienda → Personalizzazione → Domini del manifesto personalizzato.
Una chiamata REST non produce alcun risultato
| Causa probabile | Come verificare | Soluzione |
| Dominio non dichiarato | Avviso durante il caricamento del manifesto | Dichiari l'origine nella console |
| Mancano le intestazioni CORS | Strumenti di sviluppo → Scheda Rete → Errore CORS | Aggiungere Access-Control-Allow-Origin sul server |
| LNA (server locale) | Funziona su desktop, ma non sul Web | Rendere accessibile tramite HTTPS oppure utilizzare la versione desktop |
Il riquadro rimane vuoto
| Probabile causa | Come verificare | Risoluzione |
| Dominio non dichiarato | Avviso durante il caricamento del manifesto | Dichiari l'origine nella console |
| Impostazioni restrittive di X-Frame-Options o CSP | Strumenti di sviluppo → intestazioni di risposta | Modificare le intestazioni a livello di applicazione oppure utilizzare Popup: true |
| Dominio IdP SSO non dichiarato | Il frame diventa vuoto durante la fase di accesso | Dichiari anche il dominio dell’IdP |
| L’IdP rifiuta gli iframe | Il frame rimane vuoto dopo la dichiarazione del dominio | Impostare Popup: true |
Lista di controllo diagnostica
- L'origine è dichiarata in Azienda → Personalizzazione → Domini del manifesto personalizzato
- Il server REST restituisce le intestazioni CORS (Access-Control-Allow-Origin)
- Il server non si trova su una rete locale/privata (LNA — Solo Web)
- L’app incorporata non restituisce valori restrittivi per X-Frame-Options o CSP: frame-ancestors
- Per SSO / OAuth: anche i domini IdP sono dichiarati come affidabili
- Se nessun’altra soluzione funziona: Popup: true testato per i frame; Desktop testato per le chiamate REST locali