Vorrei allargare alla Cummunity una discussione nata in azienda.
Nello specifico abbiamo un’applicazione web cloud per smartphone, che deve poter utilizzare dati e logiche di una applicazione web foundation.
Per ottenere questo risultato, nell’applicazione foundation creiamo delle classi do con il servizio web api attivo, estendendo le classi do usate dall’applicazione foundation stessa. In questo modo, aggiungiamo un layer web api nell’applicazione foundation che utilizza la do già presente ma non ne intacca in alcun modo il funzionamento. Fatto questo, importiamo nel progetto dell’applicazione cloud le classi esposte dall’applicazione foundation.
Non basta, nell’applicazione foundation, il layer così creato deve poter essere usato da qualunque altra applicazione che necessità web api, in questo modo ottengo il risultato di aprire l’applicazione foundation ad usi futuri. Detto in altri termini, le web api dell’applicazione foundation dovranno essere strutturate e funzionare indipendentemente dall’applicazione cloud, e non a suo esclusivo uso e consumo. Sarà l’applicazione cloud ad adeguarsi alle web api dell’applicazione foundation, così come qualsiasi altra applicazione vorrà usare quelle web api.
Quindi, l’applicazione foundation, nel Global Document Web API, esegue la verifica dei dati di autenticazione passati nell’header della richiesta. Una porta unica, in cui viene chiesta la parola chiave prima di poter entrare ed avanzare qualsiasi richiesta.
L’applicazione cloud prevede una UI con login, che chiama un metodo esposto in web api dell’applicazione foundation per la verifica delle credenziali utente. In questo caso, abbiamo quindi due livelli di verifica:
- La parola chiave richiesta dalle WebAPI
- Il login dell’utente
E qui nasce la discussione, in che modo facciamo convivere le due?
La prima idea è far confluire entrambe nella seconda, creando nell’applicazione foundation un utente “richiesta web api” con username e password. Se la richiesta web api proviene da un utente, nell’evento Global Document Web API eseguirò la verifica delle credenziali di quell’utente. Se la richiesta proviene da un’applicazione generica, nell’evento Global Document Web API eseguirà la verifica delle credenziali dell’utente “richiesta web api”.
La seconda idea è mantenerle separate, memorizzando nell’applicazione cloud la parola chiave che verrà usata nella verifica delle credenziali a livello di web api, e poi un ulteriore metodo login che verifica, se necessario, le credenziali dell’utente che vuole eseguire accesso.
La terza è un insieme delle prime due: la web api verifica la parola chiave e non le credenziali utente (come nella seconda soluzione), il metodo login “bypassa” questa verifica, esegue la verifica delle credenziali utente e, se positiva, ritorna la parola chiave che le altre richieste web api dovranno utilizzare.
Secondo voi, quale delle tre soluzioni è la migliore, in termini di flessibilità e scalabilità?