Architettura che supporta la firma digitale di tonnellate di richieste di sapone [chiusa]

1

Qual è l'architettura ottimale per questo caso:

  1. L'applicazione Web (.Net Web Forms) si collega al servizio web di terzi tramite wcf.
  2. Il servizio Web di terze parti accetta solo richieste di sapone con firma digitale
  3. Alcuni processi aziendali tipici consistono in diverse richieste di sapone.
  4. 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.

    
posta nikita 18.11.2015 - 09:26
fonte

2 risposte

1

Questo è sicuramente un flusso di lavoro asincrono. L'utente non può praticamente essere nel ciclo in un modo bloccante perché legherà le connessioni e le risorse a monte.

Metterei messaggi non firmati su una coda per i messaggi non firmati. Avrei un'interfaccia utente che si abbona alla coda per i messaggi non firmati. Questo potrebbe essere basato su EventSource per l'efficienza, ma anche il long-polling XHR sarà sufficiente. Questa interfaccia consentirebbe la firma e invierebbe i messaggi firmati al server che li metterebbe in coda per i messaggi firmati.

Un processo separato che può effettivamente essere su qualsiasi macchina con accesso alla coda per i messaggi firmati dovrebbe quindi inviare tali messaggi al servizio di consumo.

    
risposta data 19.11.2015 - 13:22
fonte
1

Penso che tu possa farlo con una combinazione di tecnologia, sembra che tu ne possieda già la maggior parte.

1: sito web javascript o X attiva per comunicare con il lettore di schede

2: codice lato webserver per la comunicazione duplex con il client. questo sembra essere il pezzo che ti manca. È piuttosto nuovo, ma ora può essere fatto con websockets

link

3: pipeline di firma personalizzata sul servizio WCF

quindi il flusso sarebbe

client - > stabilire la connessione websocket al server web

client - > pulsante fatto clic su comando POST json sul server

webserver- > fare la logica e inviare comandi al servizio WCF

WCF - > creare messaggi per l'endpoint SOAP di terze parti

Firma WCF personalizzata - > invia un messaggio al server web richiedendo che sia firmato .. (forse usa una coda di messaggi?) aspetta ....

webserver - > utilizzando la connessione web-socket invia un messaggio al client per essere firmato

client - > ricevi un messaggio e parla con il lettore di schede per farlo firmare

client - > inviare il messaggio firmato al server web (di nuovo websocket)

webserver - > completa la chiamata in stile RPC da WCF inviando il messaggio firmato

Firma personalizzata WCF: pipeline completa con messaggio firmato

    
risposta data 19.11.2015 - 13:41
fonte

Leggi altre domande sui tag