Excelente conteúdo! Parabéns! Esse assunto é bem difícil achar referências e ver seus vídeos tem me ajudado muito com sua excelente didática. Um abraço
Grato pelo seu tempo, esse conteúdo em outro lugar teria no mínimo uma live de 2h de enrolação , muito bem explicado e objetiva, ótima didática, 💯%, parabéns!
Muito bem professora, você abordou um assunto que muita gente teme e não aborda com a mesma amplitude. Tutorial bonito, é que vai do início ao fim. FE BE
Que video incrível!! Só uma dúvida que ficou no RedirectServerAuthenticationSuccessHandler, se existir mais de um spa possível para redirecionar, o que devo fazer?
Max, nessa abordagem de BFF seria um gateway por frontend. Então vc teria que criar um outro componente pra servir o seu outro SPA, mas basicamente eles seriam iguais em nível de implantável, só mudariam as propriedades externalizadas.
@@giulianabezerra Entendi, que massa! Valeu mesmo, mas eu conseguiria fazer um login único para diferentes sistemas usando o OAuth2 e o spring-authorization-server? tipo o Google que ao realizar login eu posso usar os outros sistemas
@@MaxswellAraujo-fw5wg Eu consegui fazer algo parecido, só precisei adicionar um parâmetro na URL de autorização para identificar o spa, e no back eu criei um WebFilter para capturar esse parâmetro e adicionar como atributo na ServerWebExchange, aí criei uma implementação do ServerOAuth2AuthorizationRequestResolver para definir qual seria a URL de redirecionamento com base no atributo da exchange. Porém, eu fiz isso pensando no gateway ser um client oauth, para servir como ponto central para autorização para um front web e mobile. Mas estou tendo problemas em descobrir qual a melhor prática para o mobile, já que ele não lida muito bem com cookies.
Tem sim, mas depende do IDP. O Keycloak, por exemplo, permite informar uma url para ser usada após o login, mas se ela não for informada o redirecionamento fica por conta da aplicação. Fiz pela aplicação mesmo pq nem todo IDP permite fazer essa configuração.
Muito bom o vídeo!! Como seria o fluxo quando tenho um SPA, não tenho um TPA mas mesmo assim quero utilizar Oauth2? Sei que não faz muito sentido mas o cliente exige que seja feito utilizado Oauth2, então neste caso o provider seria o próprio Spring, certo? Apenas configurando o auth-server e resource-server seria suficiente ou teria que ter um client-server também? Mas neste caso o client já seria o SPA... Consegui fazer algumas partes mas me retorna um erro após fazer login em alguns momentos, não sei bem quando isso acontece e quando não acontece... simplesmente tem vez que me manda pra página inicial do auth-server, onde não tem nada, em vez de redirecionar pro client. Outro ponto, neste caso, eu deveria fazer o login redirecionando pra rota de auth code do auth-server ou eu poderia tentar acessar o resource-server diretamente? Obrigado.
Se for usar oauth precisa de um client. E não recomendo ser o SPA pois é inseguro, como menciono no vídeo a forma mais segura seria um BFF como client oauth.
Belo tutorial, uma dúvida o cookie HttpOnly está armazenado onde? Seria no browser do Resource Owner correto? Que no caso recebeu quando o RO se autenticou na aplicação e recebeu o Redirect para /callback vindo do AS que no nosso caso foi o Keycloak, após então toda nova request para o nosso gateway o browser seta o cookie HttpOnly junto, nosso gateway pega esse Cookie "abre" e pega o JWT e redireciona a request para o microservice RS devido com o token JWT correto? Nesse formato nosso Frontend não lida com os Tokens apenas armazena um cookie HttpOnly contendo o Token JWT que é passado para o gateway toda vez que é feito uma request e o Gateway então pega esse Cookie "abre" e pega o JWT e coloca na request para toda nova request para alguma RS correto?
Como o nosso Gateway "decodifica" o Cookie que vem da SPA e pega o jwt e envia nas Requests? Outra Dúvida e para o meu Keycloak não se comunicar com o meu Frontend, mas únicamente com o meu gateway, não gostaria que o Front se comunicasse com o Keycloak, como seria feito a abordagem para o Redirect?
HttpOnly está no SESSION cookie. Esse cookie é opaco, não tem nada dentro, então quando ele chega no gateway o gateway tem um mapa em memória que tem esse valor do cookie associado a um JWT. Então ele pega o JWT e envia pro Resource Server. Sobre o Keycloak, é como eu expliquei, se ele for fazer redirect normalmente ele faz pra internet, então como a gente não costuma colocar o redirect pro gateway pq o gateway fica na intranet. Massss, se ele tiver direto na internet, aí faz sentido deixar o redirect pra ele e aí já daria pra redirecionar pro localhost:8000/login/oauth2/code/keycloak. Mas não recomendo, como arquiteta costumo modelar o gateway na intranet, o front na internet e um apache / nginx pro front que redireciona pro gateway fazendo balanceamento.
Estou desenvolvendo um projeto do 0 em uma arquitetura em microservices, ia usar o gateway direto na internet para ser a ponte do front com o back sendo a porta de entrada para os microservices mas agora vi que essa arqutietura com um nginx fazendo balanceamento de carga é bem melhor, esse projeto vai para produção em breve e eu estou fazendo tudo Front, Back e vou fazer o deploy tbm. Muito obrigada pelos videos.
@@giulianabezerra Agora entendi, o gateway armazena o valor do cookie em mémoria quando recebe do AS correto? ai quando recebe a request do Front pega a ref do cookie e pega o valor do cookie que é jwt que está salvo em um mapa na memória e "junta" nos cabeçalhos da request para enviar para o microservice?
No caso a única falha que temos ai seria em pegar o Session Cookie e poder usar em outra máquina correto? ai por isso existe o refresh token, pois ai o atacante teria que ficar pegando toda hora un novo session cookie?
O valor do redirect uri no keycloack que você passou foi apenas para usar o proxy reverso da porta 3000? Pq você está passando o auth code para lá e depois redirecionar para o gateway né? Simulando um processo de produção que esse servidor da porta 3000 seria um nginx? Essa é a ideia?
Exatamente! O nginx fica na internet então o redirecionamento é pra ele. O gateway ficaria na intranet, então as requisições são encaminhadss do proxy reverso
Fiquei com uma dúvida, como funciona o envio do token após o login? O front precisa armazenar o token e adicionar em cada request que for fazer? Em que momento ele recuperar o token?
@@giulianabezerra Eu estou fazendo uma aplicação que terá dois cliente, um web e um mobile. Para esse caso eu teria que utilizar a estratégia do header para ter mais flexibilidade?
@@giulianabezerra O que fiquei em dúvida é se consigo aplicar o fluxo do authorization code para o mobile, já que ele não lida com cookie igual o web. No caso de usar a estratégia do jwt no header, como não consigo fazer o redirecionamento e adicionar um header, teria que armazenar o token e fornecer um endpoint para recuperar o token? Ou tem uma forma melhor de fazer isso?
Pode falar locais onde hospedar projetos em java ou serveless em java, pois tenho vontade publicar algum projeto para portfólio, backend depois trabalhar no front, como tenho pouca RAM, fica usando Swap, gostaria de publicar para facilitar
@@giulianabezerra Nossa, estou espantado sobre as playlist, capricho, muito bonito a organização, deveria ter um vídeo falando da playlist, deixar na descrição de cada vídeo
@@arozendojr , que bom que estás gostando, tem bastante playlist no canal, fica à vontade pra dar uma olhada. Depois quero fazer sim um vídeo com uma espécie de curadoria pois o canal já possui mais de 100 vídeos! Anotei aqui pra fazer algo em breve ;)
Faz sentido fazer dessa forma, com SPA e Spring Security utilizando Oauth2 sem um TPA (Google, Okta, Keycloak, Facebook)? Tenho um caso de uso onde pensei em configurar um auth-server mas somente para um client SPA, na teoria seria utilizado apenas por este mesmo e pronto... Talvez faça mais sentido o JWT neste caso, certo? Em cenários como neste meu caso, o Oauth2 não faz muito sentido? Obrigada!
Isso mesmo, se o auth server for apenas do seu spa não faz sentido oauth. Mas se ele for corporativo, como o caso do keycloak que mostrei, aí o oauth faz sentido como mecanismo de autorização de terceiros 💯
Pra que vc entenda os conceitos avançados desse vídeo, recomendo assistir toda a playlist de segurança aqui do canal, na ordem: ruclips.net/p/PLiFLtuN04BS3HEUPiEpKPv-n1Nhjm5RKQ
Excelente conteúdo! Parabéns!
Esse assunto é bem difícil achar referências e ver seus vídeos tem me ajudado muito com sua excelente didática.
Um abraço
Excelente conteúdo, muito obrigado por compartilhar seu conhecimento.
Menina, perfeitinho ❤️
Grato pelo seu tempo, esse conteúdo em outro lugar teria no mínimo uma live de 2h de enrolação , muito bem explicado e objetiva, ótima didática, 💯%, parabéns!
Obrigada! 🙏
Conteúdo exceletente !!
Realmente esse é um tema dificil de entender e de configurar, parabéns Giuliana !
Obrigado! Agradecimento aqui de um developer Português que encontrou o seu canal devido a estes tópicos de segurança super completos!!!
Que bom! Boas-vindas ao canal 🤗
Muito bom!
Giuliana gosto muito dessa didática! Muito bom!
Que ótimo! 🤗
Excelente video sobre um tema bastante complexo 👏
Muito bem professora, você abordou um assunto que muita gente teme e não aborda com a mesma amplitude. Tutorial bonito, é que vai do início ao fim. FE BE
Só o fe que não é bonito, mas tá funcional 😅
Ótimo conteúdo.
Excelente seu canal, muito sucesso!
Excelente 👏👏, poderia fazer um exemplo com spring authorization server?
Eu já fiz, depois dá uma olhada na playlist de segurança ;)
Ótimo vídeo !! Parabéns !!
Que bom que curtiu!
Aí professora arrebentou....
Que video incrível!! Só uma dúvida que ficou no RedirectServerAuthenticationSuccessHandler, se existir mais de um spa possível para redirecionar, o que devo fazer?
Max, nessa abordagem de BFF seria um gateway por frontend. Então vc teria que criar um outro componente pra servir o seu outro SPA, mas basicamente eles seriam iguais em nível de implantável, só mudariam as propriedades externalizadas.
@@giulianabezerra Entendi, que massa! Valeu mesmo, mas eu conseguiria fazer um login único para diferentes sistemas usando o OAuth2 e o spring-authorization-server? tipo o Google que ao realizar login eu posso usar os outros sistemas
@@MaxswellAraujo-fw5wg Eu consegui fazer algo parecido, só precisei adicionar um parâmetro na URL de autorização para identificar o spa, e no back eu criei um WebFilter para capturar esse parâmetro e adicionar como atributo na ServerWebExchange, aí criei uma implementação do ServerOAuth2AuthorizationRequestResolver para definir qual seria a URL de redirecionamento com base no atributo da exchange.
Porém, eu fiz isso pensando no gateway ser um client oauth, para servir como ponto central para autorização para um front web e mobile. Mas estou tendo problemas em descobrir qual a melhor prática para o mobile, já que ele não lida muito bem com cookies.
Como mudaria o login do keycloak? Usar só a api dele e a tela eu faço?
Parabéns! Ótimo conteúdo e didática. Uma dúvida tem como a URL de redirecionamento após login ser dinâmica?
Tem sim, mas depende do IDP. O Keycloak, por exemplo, permite informar uma url para ser usada após o login, mas se ela não for informada o redirecionamento fica por conta da aplicação. Fiz pela aplicação mesmo pq nem todo IDP permite fazer essa configuração.
Muito bom o vídeo!!
Como seria o fluxo quando tenho um SPA, não tenho um TPA mas mesmo assim quero utilizar Oauth2? Sei que não faz muito sentido mas o cliente exige que seja feito utilizado Oauth2, então neste caso o provider seria o próprio Spring, certo?
Apenas configurando o auth-server e resource-server seria suficiente ou teria que ter um client-server também? Mas neste caso o client já seria o SPA...
Consegui fazer algumas partes mas me retorna um erro após fazer login em alguns momentos, não sei bem quando isso acontece e quando não acontece... simplesmente tem vez que me manda pra página inicial do auth-server, onde não tem nada, em vez de redirecionar pro client.
Outro ponto, neste caso, eu deveria fazer o login redirecionando pra rota de auth code do auth-server ou eu poderia tentar acessar o resource-server diretamente? Obrigado.
Se for usar oauth precisa de um client. E não recomendo ser o SPA pois é inseguro, como menciono no vídeo a forma mais segura seria um BFF como client oauth.
Belo tutorial, uma dúvida o cookie HttpOnly está armazenado onde?
Seria no browser do Resource Owner correto? Que no caso recebeu quando o RO se autenticou na aplicação e recebeu o Redirect para /callback vindo do AS que no nosso caso foi o Keycloak, após então toda nova request para o nosso gateway o browser seta o cookie HttpOnly junto, nosso gateway pega esse Cookie "abre" e pega o JWT e redireciona a request para o microservice RS devido com o token JWT correto?
Nesse formato nosso Frontend não lida com os Tokens apenas armazena um cookie HttpOnly contendo o Token JWT que é passado para o gateway toda vez que é feito uma request e o Gateway então pega esse Cookie "abre" e pega o JWT e coloca na request para toda nova request para alguma RS correto?
Como o nosso Gateway "decodifica" o Cookie que vem da SPA e pega o jwt e envia nas Requests?
Outra Dúvida e para o meu Keycloak não se comunicar com o meu Frontend, mas únicamente com o meu gateway, não gostaria que o Front se comunicasse com o Keycloak, como seria feito a abordagem para o Redirect?
HttpOnly está no SESSION cookie. Esse cookie é opaco, não tem nada dentro, então quando ele chega no gateway o gateway tem um mapa em memória que tem esse valor do cookie associado a um JWT. Então ele pega o JWT e envia pro Resource Server.
Sobre o Keycloak, é como eu expliquei, se ele for fazer redirect normalmente ele faz pra internet, então como a gente não costuma colocar o redirect pro gateway pq o gateway fica na intranet. Massss, se ele tiver direto na internet, aí faz sentido deixar o redirect pra ele e aí já daria pra redirecionar pro localhost:8000/login/oauth2/code/keycloak. Mas não recomendo, como arquiteta costumo modelar o gateway na intranet, o front na internet e um apache / nginx pro front que redireciona pro gateway fazendo balanceamento.
Estou desenvolvendo um projeto do 0 em uma arquitetura em microservices, ia usar o gateway direto na internet para ser a ponte do front com o back sendo a porta de entrada para os microservices mas agora vi que essa arqutietura com um nginx fazendo balanceamento de carga é bem melhor, esse projeto vai para produção em breve e eu estou fazendo tudo Front, Back e vou fazer o deploy tbm.
Muito obrigada pelos videos.
@@giulianabezerra Agora entendi, o gateway armazena o valor do cookie em mémoria quando recebe do AS correto? ai quando recebe a request do Front pega a ref do cookie e pega o valor do cookie que é jwt que está salvo em um mapa na memória e "junta" nos cabeçalhos da request para enviar para o microservice?
No caso a única falha que temos ai seria em pegar o Session Cookie e poder usar em outra máquina correto? ai por isso existe o refresh token, pois ai o atacante teria que ficar pegando toda hora un novo session cookie?
O valor do redirect uri no keycloack que você passou foi apenas para usar o proxy reverso da porta 3000? Pq você está passando o auth code para lá e depois redirecionar para o gateway né? Simulando um processo de produção que esse servidor da porta 3000 seria um nginx? Essa é a ideia?
Exatamente! O nginx fica na internet então o redirecionamento é pra ele. O gateway ficaria na intranet, então as requisições são encaminhadss do proxy reverso
Esse projeto está em algum repositório no github?
Fiquei com uma dúvida, como funciona o envio do token após o login? O front precisa armazenar o token e adicionar em cada request que for fazer? Em que momento ele recuperar o token?
Nesse modelo é usado um cookie e não um header, da uma olhada no aulão spring security aqui da playlist de segurança do canal
@@giulianabezerra Eu estou fazendo uma aplicação que terá dois cliente, um web e um mobile. Para esse caso eu teria que utilizar a estratégia do header para ter mais flexibilidade?
@@giulianabezerra O que fiquei em dúvida é se consigo aplicar o fluxo do authorization code para o mobile, já que ele não lida com cookie igual o web.
No caso de usar a estratégia do jwt no header, como não consigo fazer o redirecionamento e adicionar um header, teria que armazenar o token e fornecer um endpoint para recuperar o token? Ou tem uma forma melhor de fazer isso?
quando eu crescer quero ser quem nem voce
Pode falar locais onde hospedar projetos em java ou serveless em java, pois tenho vontade publicar algum projeto para portfólio, backend depois trabalhar no front, como tenho pouca RAM, fica usando Swap, gostaria de publicar para facilitar
Claro! Eu criei uma playlist Da Arquitetura ao Deploy onde mostro como hospedar o projeto final e também a base de dados dele. Dá uma olhada ;)
@@giulianabezerra obrigado, vou assistir
@@giulianabezerra Nossa, estou espantado sobre as playlist, capricho, muito bonito a organização, deveria ter um vídeo falando da playlist, deixar na descrição de cada vídeo
@@arozendojr , que bom que estás gostando, tem bastante playlist no canal, fica à vontade pra dar uma olhada. Depois quero fazer sim um vídeo com uma espécie de curadoria pois o canal já possui mais de 100 vídeos! Anotei aqui pra fazer algo em breve ;)
Tem como disponibilizar a url do git? o frontend não consigo acompanhar.
Claro, eu achava que tava na descrição do vídeo, acabei de adicionar, dá uma olhada ;)
@giulianabezerra Obrigado querida... Assim q chegar em casa vou ver.
Faz sentido fazer dessa forma, com SPA e Spring Security utilizando Oauth2 sem um TPA (Google, Okta, Keycloak, Facebook)? Tenho um caso de uso onde pensei em configurar um auth-server mas somente para um client SPA, na teoria seria utilizado apenas por este mesmo e pronto... Talvez faça mais sentido o JWT neste caso, certo? Em cenários como neste meu caso, o Oauth2 não faz muito sentido?
Obrigada!
Isso mesmo, se o auth server for apenas do seu spa não faz sentido oauth. Mas se ele for corporativo, como o caso do keycloak que mostrei, aí o oauth faz sentido como mecanismo de autorização de terceiros 💯
@@giulianabezerra Hmmm, interessante. Muito obrigada!!! Keep up the good work :)
"Deus me livre Typescript" 😂😂😂😂😂😂😂
Oq quer dizer BFF, best friends forever?
Angular não ? :(
Não, é que na empresa que trabalho se usa React, então é a tecnologia que conheço mais.
No começo não estava entendendo nada, no fim parece que tava no começo. Meu Deus.😅😅😅😅
Pra que vc entenda os conceitos avançados desse vídeo, recomendo assistir toda a playlist de segurança aqui do canal, na ordem: ruclips.net/p/PLiFLtuN04BS3HEUPiEpKPv-n1Nhjm5RKQ