Test su ciascun endpoint di autorizzazione?

2

Sto scrivendo un server API. Il framework che stiamo utilizzando è Rails + Pundit + graphql-ruby, ma suppongo che questa domanda sia indipendente dal framework.

Abbiamo l'autenticazione + l'autorizzazione implementata sulle risorse su ciascun endpoint diverso; e vogliamo assicurarci che l'endpoint che richiede il login, sia adeguatamente protetto (vale a dire, in realtà devi essere un utente valido per poter accedere all'endpoint).

Per riuscirci, l'unico approccio che riesco a fare è ... deridere un accesso anonimo su ciascuno dei diversi endpoint che stiamo vivendo. Tuttavia, penso che questo non sia SECCO: il codice per il controllo di questi endpoint è fondamentalmente lo stesso.

(Al momento ci sono per lo più autenticazione, ma probabilmente inseriremo più autorizzazioni a livello di endpoint.)

C'è un modo migliore per farlo? In particolare, come garantire che gli endpoint siano protetti in modo sicuro con la regola di autenticazione applicata, pur mantenendo i casi di test DRY?

PS: questa domanda richiede principalmente un parere su come progettare i casi di test. È stato prima chiesto nel sito di revisione del codice e sito principale , ma contrassegnato come off-topic poiché non include alcun codice.

Quindi, ti sto chiedendo qui nel sito principale di StackOverFlow.

    
posta songyy 14.03.2018 - 09:44
fonte

2 risposte

1

Non preoccuparti di ASCIUGARE nei casi di test. Invece, concentrati sull'assicurare che ogni caso di test sia esplicito sulla verifica del comportamento specifico nella tua applicazione.

Sebbene si tratti principalmente di test unitari, questa domanda su Stack Overflow su "DAMP non ASCIUTTA" è rilevante per tutti tipi di test. Non avendo i test DRY, credo che il comportamento previsto del sistema sarà più facile da capire usando i test come una forma di documentazione: sarete facilmente in grado di scoprire se un particolare endpoint richiede l'autenticazione o meno e concentrarsi sui test eventuali aspetti dell'autorizzazione. Se la necessità di modifiche all'autenticazione o le regole di autorizzazione relative a un particolare endpoint cambiano, avere questo codice ripetuto renderà molto più semplice cambiare i casi di test intorno a quel particolare endpoint - solo se verranno apportate modifiche globali sarà necessario modificare un numero elevato di casi di test .

    
risposta data 13.05.2018 - 13:32
fonte
0

Il tuo approccio è corretto. A seconda del tuo progetto puoi avere due opzioni:
- se la tua logica è centalizzata, ad es. incapsulato nel modulo auth quindi è necessario testare solo questo modulo
- se hai incorporato la logica di autenticazione / autorizzazione nei controller, devi testarli tutti

Nonostante il design è necessario testare diversi scenari, come:
- utente anonimo
- credenziali errate
- Diritti di ruolo errati

Più si converte in scenari diversi più si può essere sicuri che il proprio livello di autenticazione / autorizzazione funzioni correttamente.

    
risposta data 14.03.2018 - 10:24
fonte

Leggi altre domande sui tag