Utilizzo dell'API Web nel sito Web con viste basate sui ruoli

-1

Comprendo le API Web. Capisco i siti web, come chiamano una web API e tutte le cose buone. La mia domanda è: come si controlla la vista utente nel sito Web che utilizza l'API, in base alle autorizzazioni dell'API. L'obiettivo sarebbe quello di non avere la vista nel sito Web se l'utente non è autorizzato a preformare tale azione. Non basta fare un trucco e nasconderlo in HTML (l'utente di Tech-savey può vedere il codice html per le azioni / i moduli dati che non dovrebbero).

Scenario semplificato: L'utente ha accesso all'API per creare altri utenti, ma non eliminare. Possono tecnicamente inviare il verbo delete all'URI, ma otterrebbero l'accesso negato. L'obiettivo sarebbe che il sito Web HTML non mostrasse l'opzione di eliminazione in primo luogo, in quanto non possono comunque preformare l'azione. Non c'è modo di sapere tramite il sito Web HTML / JS per vedere dove è / come funziona l'opzione delta (Ovviamente la vista di cancellazione mostra agli utenti con quel set di autorizzazioni)

Idea di: Avere supporto API che invia il codice HTML per le viste sul sito in base alle autorizzazioni. -Non è un grande fan di questo, perché penso che rompa l'idea dell'API. Cosa devo fare se devo fare qualcosa di simile su un'app mobile?

Utilizza il codice lato server come intermediario per chiamare l'API e creare la vista. -Im non sono sicuro di questo perché ritengo che richieda una quantità ridondante di lavoro, ma potrebbe essere l'opzione migliore.

Sto usando c # .net per questo, se questo è importante. Preferibilmente HTML JS per il sito Web, ma non credere che sia possibile a meno che non si invii l'HTML dall'API.

    
posta TotallyNerdy 10.08.2017 - 03:08
fonte

2 risposte

0

The goal would be to not have the view in the website if the user is not authorized to preform such action. Not just do a trick and hide it the HTML (Tech-savey user can see html code for actions/data forms they shouldn't).

Sono d'accordo con te. Questo sarebbe il caso ideale anche per me. Tuttavia, ritengo che questo sia dettagli di implementazione . Non c'è niente di sbagliato nel nascondere il codice HTML, non appena l'API implementa l'autorizzazione e l'autenticazione.

Un tecnico non ha bisogno di esaminare il codice. Ad esempio, lui / lei può tenere traccia delle connessioni del browser e provare per ogni URI dell'API, diversi metodi HTTP. Fondamentalmente, lui / lei può ignorare il client e attaccare l'API da qualsiasi altra applicazione (arricciatura, Postman, client java, ecc ...)

how do you control the user view in the website consuming the API, based on the API permissions

Comunque, se l'API si attacca a REST, dovrebbe essere possibile per noi ottenere ciò che vogliamo. Quello di cui abbiamo bisogno prima è sapere quali azioni possiamo svolgere. Questo dovrebbe essere possibile con il metodo OPTIONS . 1

Autorizzato

OPTIONS /rest/api/product HTTP/1.1
Host: example.net
Authentication: ...

HTTP/1.1 200 OK 
Allow: HEAD,GET,DELETE,OPTIONS

non autorizzato

OPTIONS /rest/api/product HTTP/1.1
Host: example.net    

HTTP/1.1 401 Unauthorized

È più facile a dirsi che a farsi. Potrebbe comportare molte più chiamate all'API di quelle inizialmente previste.

Un modo per risolvere il problema precedente con OPTIONS potrebbe essere l'implementazione di HATEOAS. In altre parole, potremmo rendere l'API più descrittiva.

Implementando HATEOAS la risposta API non fornisce solo rappresentazioni di risorse. Fornisce inoltre collegamenti a più risorse. I collegamenti possono essere tanto descrittivi quanto lo riteniamo appropriato. Ad esempio, guarda il modello di API PayPal .

La vista popolerebbe i suoi controlli in base ai collegamenti. Nessun collegamento, nessun controllo (pulsante, modulo, ecc.)

Per quanto riguarda le tue idee, anch'io ho accettato. Non mischiare API e visualizzazioni. Ogni cliente ha le proprie preoccupazioni e queste preoccupazioni -IMO- dovrebbero essere affrontate in modo indipendente. Più agnostico è l'API per questi problemi, meglio è.

As well as no way of knowing via the website HTML/JS to see where the delte option is/how it works (Of course the delete view shows to users with that permission set)

Supporrò che abbiamo già risolto il problema con il blocco HTML. Secondo le tue congetture, l'utente potrebbe comunque guardare il codice JS. Sì, e possiamo anche offuscare il codice.

D'altro canto, se non vogliamo che gli utenti costruiscano i propri clienti, possiamo (dovremmo) fornirgliene uno. Ad esempio, come fa Google.

1: In base ai metodi Consentiti , decidiamo cosa fare. Ricorda che Javascript può nascondere elementi DOM modificando gli stili, ma può anche aggiungere / rimuovere elementi in modo dinamico.

    
risposta data 10.08.2017 - 13:53
fonte
0

Perché ti interessa se l'HTML / JS ha la funzionalità di eliminazione nascosta? Posso dire che supponendo che tu abbia un'API in stile REST, qualsiasi persona che guarderà il tuo pulsante nascosto e capirà il perché / come / quando diventerà visibile sarà solo in grado di indovinare che il metodo DELETE HTTP contro la risorsa sarà essere il modo di cancellare la cosa Voglio capire il modello di minaccia che hai dove pensi che nascondere il pulsante e controllare i perms lato server non siano abbastanza buoni. Quindi la mia risposta sarebbe: no. La complessità extra non ne vale la pena.

    
risposta data 10.08.2017 - 06:02
fonte

Leggi altre domande sui tag