Qual è l'architettura ottimale per questo caso:
- L'applicazione Web (.Net Web Forms) si collega al servizio web di terzi tramite wcf.
- Il servizio Web di terze parti accetta solo richieste di sapone con firma digitale
- Alcuni processi aziendali tipici consistono in diverse richieste di sapone.
- L'utente deve avviare il processo di business (inviare diverse richieste di sapone) tramite l'applicazione Web e firmarlo digitalmente nel front-end con il suo certificato (smart-card contenente il suo certificato). L'applicazione Web non memorizza alcun certificato utente, memorizza solo i dati dell'utente che devono essere inviati al servizio web.
I miei pensieri attuali sono di creare un servizio web proxy che intercetti le richieste di soap da utente senza firme digitali e le inserisca nel database. Quindi l'utente aprirebbe un modulo Web dove vedrebbe tutte le richieste che deve firmare digitalmente. L'utente firma le richieste tramite un plug-in del browser web. Come risultato di tale operazione, l'applicazione web riceve richieste firmate digitalmente che può inviare al servizio web originale.
Tuttavia, ci sono alcuni problemi con questa realizzazione: non considera alcuna logica se non è possibile utilizzare i risultati ottenuti da richieste precedenti. Il processo di scambio di informazioni tra l'applicazione web e il servizio web deve essere semplice poiché l'utente invia richieste al servizio web proxy falso che non può restituire dati e risultati reali. Quindi invieremo i dati sperando che non ci sarebbero risultati da cui dipenderebbe il nostro processo di scambio di informazioni.
Un'altra opzione è firmare digitalmente tutte le richieste sul servizio web in tempo reale. Ma non riesco a ottenere come farlo in WCF. Posso usare IClientMessageInspector e intercettare il messaggio prima che venga inviato al servizio web. In teoria, in questo momento, posso richiamare alcune funzioni di frontend e attendere che l'utente firmi digitalmente la richiesta e quindi sostituire la richiesta originale con quella dell'utente. Ma la realizzazione attuale dell'applicazione web non consente alcuna callback al front-end in WCF.
Qualsiasi idea sarebbe molto apprezzata.