Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

di il
13 risposte

Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

Ciao a tutti,
Ho letto qualcosa di Spring Boot 2 ed ora avrei bisogno di uno script base da cui partire per sviluppare tutta la mia applicazione e precisamente avrei bisogno di una WebApp ben scritta, moderna, sicura e possibilmente commentata per automatizzare il processo di login. Precisamente mi servirebbe un progetto che implementi le seguenti specifiche:
1) Applicazione di tipo REST conforme a HATEOAS;
2) Spring Security con JWT e OAuth2.
L’applicazione che vorrei realizzare non fa grandi cose ma ha come obiettivo garantire la massima riservatezza dei dati per l’utente finale, un po’ come un’applicazione bancaria.
La richiesta di questo post è uno Script in Spring Boot 2 per eseguire il login.
Come sistema per colloquiare con un DBMS ero indeciso tra JDBC e JPA ma pensavo il primo perché a me piace scrivere le query a mano, trovo l’approccio decisamente più semplice. Se dovessi mai cambiare DBMS credo che il tempo impiegato per editare le query sarebbe inferiore a quello usato per studiare a dovere JPA.
Inoltre, vorrei chiedervi se gli strumenti che ho intenzione di utilizzare sono quelli giusti o se esiste qualcosa di meglio.
A presto e grazie in anticipo

13 Risposte

  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    iBaffiPro ha scritto:


    Ho letto qualcosa di Spring Boot 2 ed ora avrei bisogno di uno script base da cui partire per sviluppare tutta la mia applicazione e precisamente avrei bisogno di una WebApp ben scritta, moderna, sicura e possibilmente commentata per automatizzare il processo di login. Precisamente mi servirebbe un progetto che implementi le seguenti specifiche:
    1) Applicazione di tipo REST conforme a HATEOAS;
    2) Spring Security con JWT e OAuth2.
    Dal dire "ho letto qualcosa di Spring Boot 2" a fare tutto questo .... ce ne passa parecchio. E non è questione di trovare "uno script base" ... si deve studiare e fare tutte le valutazioni che servono.

    Innanzitutto ti è chiaro cosa è HATEOAS? Detto in maniera molto semplicistica, si tratta di fare in modo che nelle response fornite dal server ci siano, oltre ai dati, anche dei "link" che un client "evoluto" (ma nel senso che SA, è a conoscenza, di questi link) possa sfruttare queste informazioni aggiuntive per "navigare" tra le risorse, senza doversi cablare al suo interno le nozioni su come comporre tutti gli url.

    Quindi a questo punto ci sarebbero svariate questioni e domande: di quante/quali risorse stiamo parlando? E come sarebbero collegate tra di loro?
    E poi: quale formato intenderesti usare per rappresentare le risorse? JSON? XML? Ma c'è una domanda ancora più importante: CHI sarebbe poi il "client" di tale servizio? Una app mobile? Un frontend web fatto in un qualunque framework noto es. Angular, Vue, ecc...? O una applicazione "desktop"?

    iBaffiPro ha scritto:


    L’applicazione che vorrei realizzare non fa grandi cose ma ha come obiettivo garantire la massima riservatezza dei dati per l’utente finale, un po’ come un’applicazione bancaria.
    Sicuramente HTTPS e con l'uso di un certificato valido (che si paga, non li hai a-gratis), non certo farlocco cioè auto-firmato.

    iBaffiPro ha scritto:


    La richiesta di questo post è uno Script in Spring Boot 2 per eseguire il login.
    Ripeto che la questione/soluzione NON è trovare solo un "qualche" script.

    iBaffiPro ha scritto:


    Come sistema per colloquiare con un DBMS ero indeciso tra JDBC e JPA ma pensavo il primo perché a me piace scrivere le query a mano, trovo l’approccio decisamente più semplice. Se dovessi mai cambiare DBMS credo che il tempo impiegato per editare le query sarebbe inferiore a quello usato per studiare a dovere JPA.
    Per l'accesso ad una base dati ci sono una svagonata di possibilità. Anche qui è tutto da valutare. Di quante tabelle si sta parlando? Ci sono relazioni semplici o molto complesse tra le tabelle? Lo devi sapere e valutare tu ...

    iBaffiPro ha scritto:


    Inoltre, vorrei chiedervi se gli strumenti che ho intenzione di utilizzare sono quelli giusti o se esiste qualcosa di meglio.
    Tutto questo certo che si può fare con Spring Boot. Ma anche con altre tecnologie/framework. Lo si può fare con Java EE puro, oppure con Quarkus (un framework Java moderno di Red Hat), o con il Eclipse MicroProfile e sicuramente anche altro.

    La questione semmai è cosa TU conosci o quante settimane/mesi intendi "spendere" per lo studio di tutte queste cose.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Grazie per il tuo supporto. Rispondo in ordine alle tue domande ma ti comunico già che la mia preparazione è anni luci di distanza dalla tua.
    Non sono esperto di HATEOAS ma sembra l’approccio più corretto alla programmazione, per questo stavo cercando di seguire questa strada.
    L’applicazione che vorrei realizzare deve permettere di eseguire il login ed accedere ad una serie di informazioni riservate.
    Per rappresentare le risorse pensavo a JSON.
    Al momento non so ancora usare Angular ma in futuro lo implementerò nelle mie applicazioni e sicuramente anche in questa. Al momento uso Bootstrap, HTML, CSS, nulla di più complesso.
    Sto progettando un sito web dinamico.
    Come HTTPS pensavo a questo:
    https://letsencrypt.org
    ma se non fosse sufficiente potrei prenderne uno a pagamento, costo permettendo ovviamente. Quando avrò finito la webapp ci penserò.
    È vero che la questione/soluzione non è trovare solo un "qualche" script ma è altrettanto vero che uno script può aiutare.
    In merito al DBMS trovo più semplice scrivere query ma per ora è il problema minore. Cose complesse non ce ne sono ma non vedo la necessità di usare qualcosa che sostituisca le query. Conosco entrambi i sistemi ma non sono molto ispirato da JPA.
    Da cosa leggo il sistema più sicuro per il login è Spring Security quindi pensavo a Spring Boot 2.0. Le altre tecnologie non le conosco, dovrei studiarle dall’inizio, non mi interessano molto.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    iBaffiPro ha scritto:


    Non sono esperto di HATEOAS ma sembra l’approccio più corretto alla programmazione, per questo stavo cercando di seguire questa strada.
    L’applicazione che vorrei realizzare deve permettere di eseguire il login ed accedere ad una serie di informazioni riservate.
    Per rappresentare le risorse pensavo a JSON.
    Al momento non so ancora usare Angular ma in futuro lo implementerò nelle mie applicazioni e sicuramente anche in questa. Al momento uso Bootstrap, HTML, CSS, nulla di più complesso.
    Giusto perché tu lo sappia: per poter gestire/invocare webservice REST (con HATEOAS o senza HATEOAS che sia) lato front-end, bisogna conoscere bene Javascript/EcmaScript e possibilmente uno dei framework "moderni" (Angular / Vue / React / ecc...) o in alternativa l'utilizzo di una libreria più semplice come JQuery.
    Senza queste nozioni, JSON e REST lato front-end non li maneggi in alcun modo ....
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Ti ringrazio molto per il messaggio e ho capito tutto quello che mi hai detto. In buona sostanza mi stai dicendo che se non mi ridimensiono un attimo rischio di non uscirne vivo o di aprire script complessi e di perdermi o peggio ancora di non capire nulla.
    Oggi ho letto questa pagina:
    https://spring.io/guides/gs/securing-web
    e mi sembra tutto molto chiaro e semplice ma se dovessi implementare un DBMS farei sicuramente dei pasticci.
    Inoltre ho anche provato a mettere la JDK 1.15 per vedere come si comporta lo script con le versioni più recenti di JAVA e vedo che in WebSecurityConfig.java ci sono delle classi deprecate (User.withDefaultPasswordEncoder()). Uno script di questo tipo non è certo moderno e dovrà presto o tardi essere aggiornato. Oggi Java 1.8 va bene ma domani sicuramente no, bisognerà adeguarsi alla versione 1.15.
    Quando ho iniziato a studiare Spring Boot pensavo di non dover mettermi a creare uno Script per il login e la registrazione degli utenti ma di poter scaricare degli script già pronti, non fatti dal programmatore di turno come me ma da esperti affermati della Community di Spring Boot.
    Volendo rinunciare a tutto ma non alla sicurezza e quindi a Spring Security, esiste uno script alla mia portata che illustra come impiegare questo modulo del framework? Quello che a me interessa, come ti dicevo è la sicurezza ma al contempo avere un'applicazione che non debba essere aggiornata continuamente.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    iBaffiPro ha scritto:


    vedo che in WebSecurityConfig.java ci sono delle classi deprecate (User.withDefaultPasswordEncoder()).
    Non c'entra la versione di Java ma di Spring Security (tirata dentro da Spring Boot).
    Lo dice la documentazione: https://docs.spring.io/spring-security/site/docs/4.2.20.RELEASE/apidocs/org/springframework/security/core/userdetails/User.html#withDefaultPasswordEncoder--

    iBaffiPro ha scritto:


    Quello che a me interessa, come ti dicevo è la sicurezza ma al contempo avere un'applicazione che non debba essere aggiornata continuamente.
    Direi che per il momento puoi trascurare la security, si può sempre aggiungere in un secondo momento.

    Hai parlato di REST. Sai esporre degli endpoint REST da una applicazione Spring/Boot? Sai usare Jackson (la libreria di binding per JSON)?
    Hai parlato di HATEOAS. Hai capito veramente di cosa si tratta? Hai già visto il progetto Spring HATEOAS? (https://spring.io/projects/spring-hateoas) Questo è quello che va usato. Fortunatamente, Spring Boot offre un buon supporto a HATEOAS. Con altri framework/specifiche (es. JAX-RS oppure il MicroProfile) non c'è purtroppo questo bel supporto e si è lasciati un po' soli nelle scelte e implementazione.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Ho letto il link a withDefaultPasswordEncoder(), ora mi è tutto più chiaro, grazie. Di REST si, ho letto qualcosa, ho anche visto delle esercitazioni che mostrano come usarlo però non riesco da zero a costruire la login e la registrazione degli utenti e mi sembra anche strano che con Spring Boot bisogni farlo a manina. Di HATEOAS non conosco molto ma conosco la sua importanza. Java offre tante strade, a me ne basta una valida e collaudata da cui partire per sviluppare la mia applicazione.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    iBaffiPro ha scritto:


    non riesco da zero a costruire la login e la registrazione degli utenti
    Ti ho suggerito prima di trascurare, inizialmente, security-login-autenticazione-ecc....

    iBaffiPro ha scritto:


    Di HATEOAS non conosco molto ma conosco la sua importanza.
    Non tutti i servizi REST usano HATEOAS. HATEOAS non è una cosa "obbligatoria", è solamente il livello più "alto" tra i concetti di REST. E se è utile o no dipende anche da CHI è il client del servizio (mobile, front-end web ecc...).

    iBaffiPro ha scritto:


    Java offre tante strade, a me ne basta una valida e collaudata da cui partire per sviluppare la mia applicazione.
    Non esiste "una sola unica strada collaudata". Ci sono tante scelte da fare, a tutti i vari livelli (fino giù al DB).
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Perché non usare Jsf, ci sono anche delle librerie come prime Faces...
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    leon77 ha scritto:


    Perché non usare Jsf, ci sono anche delle librerie come prime Faces...
    Perché JSF non c'entra proprio nulla con webservice, JSON, REST, HATEOAS.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Scusa, capisco tutta la parte rest, ma perché non puoi fare un web service?
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    leon77 ha scritto:


    Scusa, capisco tutta la parte rest, ma perché non puoi fare un web service?
    I webservice (REST, SOAP ecc..) servono per trasferire avanti-indietro solo dei dati (per REST tipicamente in formato XML o JSON; per SOAP è solo XML) mentre JSF serve per costruire una user interface (quindi una presentazione "visuale") nelle web application. Sono due cose molto diverse ...
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Scusate se per un po’ di tempo non mi sono fatto sentire ma ero impegnato a fare altro. Dopo tanti post non ho trovato la soluzione a questo mio problema e tra tutti questi termini, approcci, ecc… mi sono perso. Provo a formulare una richiesta diversa con la speranza di poter scaricare uno script decente ed iniziare da quello per sviluppare la mia applicazione.
    A me serve uno script che permetta ad un utente generico di registrarsi in un DB con la propria e-mail e che sia al contempo sicuro, scritto bene, non troppo lungo o complesso e soprattutto RIUTILIZZABILE in tutte le mie applicazioni future. Mi piacerebbe che tra i moduli della mia Web App ci fosse anche Spring Security ma mi posso accontentare.
    Come strumento per interagire con il DB ho visto gli ORM e qualcosa ho compreso ma io continuo a preferire le classiche query. È vero che l’ORM è indipendente dal DB ma non è indipendente da JAVA e rende le operazioni di interazione con il DB più complesse. Inoltre, ci sono dei problemi di fondo legati all’uso degli ORM. Molte operazioni fatte con gli ORM sono più lente.
    Resto in attesa di un vostro consiglio, l’obbiettivo è avere qualcosa di COMPRENSIBILE e RIUTILIZZABILE.
    Andbin sembri preparatissimo, forse puoi trovare qualcosa di utile per il mio scopo.
  • Re: Applicazione REST conforme a HATEOAS con Spring Security, JWT e OAuth2

    Facendo una ricerca on-line trovo questi script:
    https://o7planning.org/11543/create-a-login-application-with-spring-boot-spring-security-spring-jdbc
    https://www.codejava.net/frameworks/spring-boot/form-authentication-with-jdbc-and-mysql
    Oggi provo a dare un’occhiata ad entrambi.
    A vostro avviso qual è il migliore?
    Potreste dirmi i pro e i contro di questi 2 approcci?
    Se conoscete altro sono ben felice di ascoltarvi.
    Grazie
Devi accedere o registrarti per scrivere nel forum
13 risposte