Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Controle de acesso e segurança com Angular

Estou com outra dúvida grande com o Angular.

Reparei que ele roda fora de um servidor de aplicação como o Wildfly. A ideia é que ele simplesmente consuma os serviços.

Aí vem minha maior dúvida. Vou usar como exemplo a aplicação que estou trabalhando.

Tenho um servidor usando o VRaptor4 que tem algumas páginas estáticas JSP de apresentação e um botão de login que direciona para a página de login. Até aqui ok.

Depois do login eu devo exibir a página do sistema mesmo que irá usar Angular, nesse caso meu index.html, na verdade seria um jsp, dashboard.jsp por exemplo.

Isso funciona? É uma boa prática? Qual a melhor forma de fazer esse controle de acesso?

3 respostas
solução!

Oi Vinícius!

Angular é um framework de Single Page Application, isso significa que seu servidor não devolve página HTML e não gera nada de HTML dinamicamente. O que seu servidor devolve é apenas dados através de uma API, isso porque é o framework de SPA que constrói a view no client mesmo.

No seu caso, você esta usando as duas coisas e isso fere o princípio do SPA. Mas eu entendi que parte do seu sistema é em Angular e outra não, tudo bem. Então vou continuar minha orientação nessa sua realidade.

Aplicações em SPA não usam sessão do usuário para guardar informações de usuário logado ou não. Elas utilizam um token, mais notadamente JWT. Mas pelo o que eu entendi você terá dificuldades, porque faz o login fora do framework e quando você for na aplicação em Angular, cadê o token?

Numa aplicação em SPA seu login chama uma API no servidor que ao autenticar o usuário devolve um token de acesso que é guardado no browser e enviado a cada requisição. Seu backend sempre recebe esse token e verifica se o seu cliente SPA pode chamar esse ou aquele serviço.

Como implementar esse token? Isso depende da tecnologia do backend utilizada, bibliotecas disponíveis e foge do escopo de uma aplicação em Angular, até porque essa é uma solução para SPA e Angular 2 é um framwork para SPA. Em Java é de um jeito, em Python é de outro, em Php é de outro.

Talvez seja interessante você estudar sobre a arquitetura de uma aplicação em SPA.

No entanto, no curso de MEAN (que é feito em Node.js) eu faço essa autenticação baseada em Token com Angular 1.X. Foi um pedido dos meus alunos, mas como você usa Java terá que ver como implementar. Talvez o curso de MEAN, a parte final que fala de JWT, API no server lance uma luz sobre essas questões arquiteturais.

Espero ter ajudado e não complicado a sua vida.

Ajudou bastante, realmente sou novo nessa parte de SPA com Angular, por isso a dúvida como funciona essa parte de segurança. Também me direcionou para buscar tutoriais no google.

Parece que consigo fazer com esse JWT, a minha página principal pode continuar como esta e quando clicar em login já faço essa parte em Angular.

Achei alguns tutoriais que ensinam como funciona o modulo de autenticação do Angular e usam esse JWT.

Vou deixar o link aqui para caso alguém mais precise.

https://auth0.com/blog/angular-2-authentication/

https://medium.com/@blacksonic86/angular-2-authentication-revisited-611bf7373bf9#.frbydq9tv

Obrigado

Opa Vinicius, vc tem algumas maneiras de fazer... vc pode fazer um controle de acesso padrão e redirecionar para o html que vai carregar sua app angular... a forma mais tradicional é apostar numa autenticação mais rest mesmo, usar um JWT da vida para gerar o token representando o user logado e enviar em toda requisição que fizer a partir do angular.

[editado] Mestre Flavio já tinha respondido antes. [/editado]