427 messaggi dal 13 novembre 2009
SAlve,
ho sviluppato un servizio web api core 3 implementando jwt in bearer e database custom utenti. Domanda: come fare in modo che siano il website e l'app mobile creati adhoc ad essere autorizzati per l'accesso al servizio?
Per il website ho un dominio/ip da poter definire nella configurazione del servizio per poter wrappare il chiamante, ma per l'app mobile come poter intercettare che la chiamata provenga proprio da quella installata su un device terzo?
grazie
710 messaggi dal 13 novembre 2008
Contributi
ciao,
il token JWT lo invii assieme ad ogni richiesta verso la tua api, se il token viene validato dall'api l'app può accedere ai servizi; il senso di JWT è quello di permettere a differenti domini, device, ecc. di poter accedere ai servizi forniti da un endpoint con una certo grado di sicurezza e semplicità
Nella definizione del servizio JWT, definisci anche questi parametri, che concorreranno alla validazione del token generato ed inviato, e a capire se chi chiama può essere autorizzato
ValidAudience
ValidIssuer
IssuerSigninKey
Quindi ti basta generare un token JWT impostando i parametri correttamente, inviarlo all'api insieme alla richiesta, l'api provvederà a validarlo, se validato chi ha inviato il token accede ai servizi, non serve altro.
427 messaggi dal 13 novembre 2009
Grazie per la risposta ma come funziona JWT è chiaro. Io vorrei dare accesso solo a specifiche applicazioni, il sito web che ha un proprio dominio e/o ip esclusivo quindi semplice da intercettare. Ma come identifico una app mobile quando fa la chiamata al servizio? Come faccio a capire se è quella app a chiamare il servizio è non un’altra app?
Modificato da flaviovb il 07 aprile 2020 13:53 -
710 messaggi dal 13 novembre 2008
Contributi

Nella definizione del servizio JWT, definisci anche questi parametri, che concorreranno alla validazione del token generato ed inviato, e a capire se chi chiama può essere autorizzato
ValidAudience
ValidIssuer
IssuerSigninKey

E' chiaro cosa chiedi, ma non devi intercettare nulla e verificare nulla, solo impostare correttamente il token, inviarlo e verificarlo; chiunque con il token corretto ha accesso, è proprio così che funziona JWT, infatti è utile e strautilizzato per semplificare la gestione della sicurezza con app mobile.
Se proprio vuoi delle verifiche in più imposta un header insieme alla richiesta e verifica anche quello, oppure imposta delle politiche CORS, ma non è che questo ti fornisca chissà quale sicurezza in più ed il concetto comunque non cambia.
Ovviamente proprio perché il token emesso fornisce accesso incondizionato occorre implementare delle politiche di scadenza a breve termine e di refresh
427 messaggi dal 13 novembre 2009
Mi spiego meglio
JWT lo uso da parecchio ed è ok
Il problema è che il servizio deve essere interrogato solo ed esclusivamente dal mio sito web e dalla mi app mobile
Quindi solo utilizzando il sito o la app si può interrogare il servizio
Visto che il web service è pubblico chiunque potrebbe conoscendo le action loggarsi con delle grant valide. Questo non deve accadere
Per poter interrogare il servizio mi ripeto o si passa per il sito web o tramite app mobile
Il web service può intercettare chi lo chiama quindi posso sapere se è il mio sito web dal dominio o dall’ip.
Se mi chiamo la app mobile come faccio a sapere che è quella a chiamare il servizio?
710 messaggi dal 13 novembre 2008
Contributi

imposta un header insieme alla richiesta e verifica anche quello, oppure imposta delle politiche CORS


oppure manda in querystring un codice che l'endpoint verificherà, oppure appena prima che l'app mobile mandi la richiesta scrivi un codice criptato in un db comune con data di scadenza che l'endpoint verificherà

ma a mio avviso sono tutte soluzioni aggirabili

il mio dubbio però è: chi è questo chiunque che potrebbe loggarsi a tua insaputa? perché quantomeno dovrebbe avere la possibilità di emettere un token valido...
427 messaggi dal 13 novembre 2009
Il mio servizio web espone con swagger la propria struttura anche per possibili ragioni commerciali e non solo di test da parte mia, a prescindere da postman.
Detto questo chiunque accreditato nel sistema potrebbe quindi utilizzare questi metodi per interrogare il servizio.
In un prossimo o immediato futuro se applicassi una politica tale da autorizzare certi utenti a sfruttare il servizio web direttamente con la propria interfaccia proprietaria potrei allargare il mio business.
Controllare che un utente sia autorizzato a chiamare il mi web service con il mio sito web ok nessun problema, ma se volessi contabilizzare e tenere traccia di auali sono le app che l'utente utilizza per collegarsi al mio servizio web come lo faccio: Ad ese:
- l'utente di collega al servizio tramite il mi osito: nell'header della richiesta controllo chi mi chiama e risulta www.miosito.it
- l'utente utilizza la mia app scaricata dal market: come so che è la mia app che chiama il servizio?
- l'utente ha il priprio gestionale che la sua software house ha customizzato per chiamare il servizio: è u ngestione client/server desktop. Come traccio che sia questo a chiamare il servizio? Dare delle grant specifiche non servirebbe!
In sostanza come traccio cosa, lo strumento, che sta chiamando il mio web service? Se non tengo traccia di chi e in che modo mi chiama potrei ad esempio perdere soldi se su questo ho impostato la mia politica commerciale
710 messaggi dal 13 novembre 2008
Contributi
ok, adesso è un po' più chiara anche la struttura e l'utilizzo che si fa dell'api; come per il collegamento dal tuo sito controlli un qualche header, per il collegamento dalla tua app puoi controllare lo User-Agent che imposterai univocamente sulla tua app, non mi occupo di app mobile però credo sia possibile, ma...
a mio parere questo ti da solo un blando controllo, personalmente implementerei qualcosa di più complesso, soprattutto se sono implicate politiche di tipo commerciale

sulla falsariga di quanto ti ho indicato nel post precedente alcune idee:

fornire al cliente un codice univoco che deve essere verificato prima di passare al processo di autorizzazione dell'api, come lo decidi in base alla tua struttura specifica, es. hardcoded con verifica verso un tuo db clienti oppure

realizzando un servizio interposto tra app e api che riceve il codice univoco e fa le verifiche

oppure utilizzare un servizio di monitoraggio api tipo Runscope e similari, ognuno ha le sue caratteristiche vanno valutati se riescono ad identificare univocamente il chiamante (e in base a cosa)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.