Proteja suas fronteiras: Segurança de Microservices com Spring Security e CAS 2017 Quem sou eu? Alexandre Arcanjo de Queiroz Engenheiro de Software Sênior na Geofusion Revisor Técnico na Packt Publishing O que é o CAS? ● Central Authentication Service ● Sistema (e um protocolo) de autenticação baseado em tokens ● Centralizar login ● Single Sing-On ● Proteger contra proliferação e exposição de senhas ● Yale University ● Aplicação Web Java O que é o CAS? Customização CAS Protocol JAAS JDBC LDAP OAuth 2.0 Active Directory Open ID RADIUS SAML X.509 Certs cas.war Provedor Single Sign-On interno também cas.war Fluxo de login básico Java Application CAS Server Fluxo de login básico Java Application index.jsp CAS Server Fluxo de login básico Java Application index.jsp [Não está logado] CAS Filter CAS Server Fluxo de login básico Java Application index.jsp [Não está logado] redirect:/cas/login CAS Filter CAS Server Fluxo de login básico Java Application index.jsp [Não está logado] redirect:/cas/login CAS Filter /cas/login CAS Server Fluxo de login básico Java Application index.jsp [Não está logado] redirect:/cas/login CAS Filter /cas/login username, password CAS Server Fluxo de login básico Java Application CAS Server index.jsp [Não está logado] redirect:/cas/login CAS Filter /cas/login username, password [logado] Fluxo de login básico Java Application CAS Server index.jsp [Não está logado] redirect:/cas/login CAS Filter /cas/login username, password redirect:index.jsp?ticket=ST-* CASTGC [logado] Fluxo de login básico Java Application CAS Server index.jsp [Não está logado] redirect:/cas/login CAS Filter /cas/login username, password redirect:index.jsp?ticket=ST-* CASTGC index.jsp?ticket=ST-* [logado] CAS Clients Oficiais ● ● ● ● ● ● Java (CAS Client 3.0 e 3.1) Java/Apache Shiro (shiro-cas) PHP (PhpCAS) Apache (mod_auth_cas) .NET (.NET CAS Client) REST API Não Oficiais: ● Python, Perl, Ruby (On Rails), Erlang, Nginx, Node.js Exemplo proposto CAS Server <<autentica>> CAS Service customer-service <<autentica>> <<usa>> CAS Service <<chamada autenticada server-side>> product-service Código-fonte http://goo.gl/UJGxF2 Considerações finais ● Tá bom e a documentação? ● Problemas conhecidos? ● Eu vou ter que fazer essa configuração em todos os meus serviços? Considerações finais Referências ● ● ● ● ● ● https://wiki.jasig.org/display/CAS/Home https://www.apereo.org/projects/cas http://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/cas.html https://github.com/racx/cas-auth-lua-nginx https://github.com/toshipiazza/ngx-http-cas-client-lua https://www.purdue.edu/apps/account/html/cas_presentation_20110407.pdf www.linkedin.com/in/alexandrequeiroz [email protected] Alexandre Arcanjo de Queiroz ArcanjoQueiroz Obrigado