SlideShare a Scribd company logo

JSR 375 Segurança em Java EE 8

Helder da Rocha
Helder da Rocha
Helder da RochaIndependent technology writer & researcher at Argo Navis

Palestra ministrada no TDC 2015

JSR 375 Segurança em Java EE 8

1 of 68
Download to read offline
helderdarocha helder@argonavis.com.br
Julho/2015
JSR 375
O futuro da segurança em Java EE 8
Objetivos
Discutir os problemas que existem na API
padrão de segurança do Java EE atual
Apresentar as idéias que estão sendo
discutidas sobre o JSR-375: API de
Segurança do Java EE 8
Quem sou eu? Who am I? Кто я?
Helder da Rocha
argonavis.com.br
Tecnologia * Ciência * Arte
Java & Web desde 1995
Autor de cursos e livros

+ de 2500 alunos 

+ de 8000 horas de aula
helderdarocha.com.br
A API padrão de
segurança do 

Java EE 

é muito complexa?
Java EE 8 Community Survey
O que deve ser priorizado?
Fonte:
Java EE 8 Community Survey
Java EE 8 Community Survey
O que deve ser priorizado?
2˚
Fonte:
Java EE 8 Community Survey
Ad

Recommended

Visão geral da segurança em Java EE
Visão geral da segurança em Java EEVisão geral da segurança em Java EE
Visão geral da segurança em Java EEHelder da Rocha
 
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EEJavaOne 2015 - Simplificando a segurança de sua aplicação com Java EE
JavaOne 2015 - Simplificando a segurança de sua aplicação com Java EELeonardo Zanivan
 
TDC 2016 - Simplificando a segurança de sua aplicação com Java EE
TDC 2016 - Simplificando a segurança de sua aplicação com Java EETDC 2016 - Simplificando a segurança de sua aplicação com Java EE
TDC 2016 - Simplificando a segurança de sua aplicação com Java EELeonardo Zanivan
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEMagno Logan
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software SeguroAugusto Lüdtke
 
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner EliasTratando as vulnerabilidades do Top 10 do OWASP by Wagner Elias
Tratando as vulnerabilidades do Top 10 do OWASP by Wagner EliasMagno Logan
 
DevSecOps - Segurança em um pipeline contínuo
DevSecOps - Segurança em um pipeline contínuoDevSecOps - Segurança em um pipeline contínuo
DevSecOps - Segurança em um pipeline contínuoEndrigo Antonini
 

More Related Content

What's hot

Teste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingTeste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingCristiano Caetano
 
Segurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPSegurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPFabiano Pereira
 
Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Pablo Ribeiro
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Engenharia de Software II - Teste de segurança de software
Engenharia de Software  II - Teste de segurança de softwareEngenharia de Software  II - Teste de segurança de software
Engenharia de Software II - Teste de segurança de softwareJuliano Padilha
 
TDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyTDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyLeonardo Zanivan
 
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBDica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBAlcyon Ferreira de Souza Junior, MSc
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações WebCassio Ramos
 
Joomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurançaJoomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurançaFernando Soares
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesClavis Segurança da Informação
 
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraClavis Segurança da Informação
 

What's hot (20)

Testes de segurança em aplicações web
Testes de segurança em aplicações webTestes de segurança em aplicações web
Testes de segurança em aplicações web
 
Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)
 
Teste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingTeste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testing
 
Segurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPSegurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASP
 
Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Engenharia de Software II - Teste de segurança de software
Engenharia de Software  II - Teste de segurança de softwareEngenharia de Software  II - Teste de segurança de software
Engenharia de Software II - Teste de segurança de software
 
Ameacas e Vulnerabilidades em Apps Web-2013
Ameacas e Vulnerabilidades em Apps Web-2013Ameacas e Vulnerabilidades em Apps Web-2013
Ameacas e Vulnerabilidades em Apps Web-2013
 
TDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com WildflyTDC 2016 - Rodando JavaScript Server com Wildfly
TDC 2016 - Rodando JavaScript Server com Wildfly
 
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEBDica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB
 
Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações Web
 
Joomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurançaJoomla!, SSL e um pouco sobre segurança
Joomla!, SSL e um pouco sobre segurança
 
Java security
Java securityJava security
Java security
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
PHP Seguro em 2013
PHP Seguro em 2013PHP Seguro em 2013
PHP Seguro em 2013
 
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Jaas apresentado
Jaas apresentadoJaas apresentado
Jaas apresentado
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
 

Viewers also liked

Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Frederico Maia Arantes
 
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreJava 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreFrederico Maia Arantes
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaFrederico Maia Arantes
 
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0David Delabassee
 
Gráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGGráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGHelder da Rocha
 
New MVC 1.0 JavaEE 8 API
New MVC 1.0 JavaEE 8 APINew MVC 1.0 JavaEE 8 API
New MVC 1.0 JavaEE 8 APITrayan Iliev
 
Java EE 8 Recipes
Java EE 8 RecipesJava EE 8 Recipes
Java EE 8 RecipesJosh Juneau
 
Java EE 8 - February 2017 update
Java EE 8 - February 2017 updateJava EE 8 - February 2017 update
Java EE 8 - February 2017 updateDavid Delabassee
 
Java EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVCJava EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVCJosh Juneau
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBRafael França
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)Rudy De Busscher
 
Finally, EE Security API JSR 375
Finally, EE Security API JSR 375Finally, EE Security API JSR 375
Finally, EE Security API JSR 375Alex Kosowski
 

Viewers also liked (16)

Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
 
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreJava 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
 
MVC 1.0 / JSR 371
MVC 1.0 / JSR 371MVC 1.0 / JSR 371
MVC 1.0 / JSR 371
 
HTML5 Media Elements
HTML5 Media ElementsHTML5 Media Elements
HTML5 Media Elements
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - Goiânia
 
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
 
Gráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVGGráficos Vetoriais na Web com SVG
Gráficos Vetoriais na Web com SVG
 
New MVC 1.0 JavaEE 8 API
New MVC 1.0 JavaEE 8 APINew MVC 1.0 JavaEE 8 API
New MVC 1.0 JavaEE 8 API
 
Java EE 8 Recipes
Java EE 8 RecipesJava EE 8 Recipes
Java EE 8 Recipes
 
Java EE 8 - February 2017 update
Java EE 8 - February 2017 updateJava EE 8 - February 2017 update
Java EE 8 - February 2017 update
 
Java EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVCJava EE 8 Web Frameworks: A Look at JSF vs MVC
Java EE 8 Web Frameworks: A Look at JSF vs MVC
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEB
 
Casperjs-tdc-2016.ppt
Casperjs-tdc-2016.pptCasperjs-tdc-2016.ppt
Casperjs-tdc-2016.ppt
 
Model View Controller (MVC)
Model View Controller (MVC)Model View Controller (MVC)
Model View Controller (MVC)
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 
Finally, EE Security API JSR 375
Finally, EE Security API JSR 375Finally, EE Security API JSR 375
Finally, EE Security API JSR 375
 

Similar to JSR 375 Segurança em Java EE 8

API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilImplementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilRenato Groff
 
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...Renato Groff
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes javaBruno Garcia
 
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Renato Groff
 
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreImplementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreRenato Groff
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 
Implementando APIs REST mais seguras - TDC 2019 - São Paulo
Implementando APIs REST mais seguras - TDC 2019 - São PauloImplementando APIs REST mais seguras - TDC 2019 - São Paulo
Implementando APIs REST mais seguras - TDC 2019 - São PauloRenato Groff
 
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0Renato Groff
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Clavis Segurança da Informação
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...Magno Logan
 
Segurança no MySQL
Segurança no MySQLSegurança no MySQL
Segurança no MySQLMySQL Brasil
 
OWASP_BSB_20120827_TOP10_ISMAELROCHA
OWASP_BSB_20120827_TOP10_ISMAELROCHAOWASP_BSB_20120827_TOP10_ISMAELROCHA
OWASP_BSB_20120827_TOP10_ISMAELROCHAOWASP Brasília
 

Similar to JSR 375 Segurança em Java EE 8 (20)

API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure BrasilImplementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
Implementando APIs seguras na nuvem - Outubro-2018 - Azure Brasil
 
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
Boas práticas de segurança no acesso a dados em aplicações Web - SQLSaturday ...
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Java v1.1
Java v1.1Java v1.1
Java v1.1
 
Manual
ManualManual
Manual
 
Certificacoes java
Certificacoes javaCertificacoes java
Certificacoes java
 
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
Boas práticas de segurança no acesso a dados em Web Apps - SQLSaturday #972 -...
 
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreImplementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
Implementando APIs REST mais seguras - TDC 2019 - São Paulo
Implementando APIs REST mais seguras - TDC 2019 - São PauloImplementando APIs REST mais seguras - TDC 2019 - São Paulo
Implementando APIs REST mais seguras - TDC 2019 - São Paulo
 
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0
Boas práticas de segurança no acesso a dados em aplicações Web - DBA BRASIL 4.0
 
Aula 1 apresentação
Aula 1   apresentaçãoAula 1   apresentação
Aula 1 apresentação
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
 
Segurança no MySQL
Segurança no MySQLSegurança no MySQL
Segurança no MySQL
 
OWASP_BSB_20120827_TOP10_ISMAELROCHA
OWASP_BSB_20120827_TOP10_ISMAELROCHAOWASP_BSB_20120827_TOP10_ISMAELROCHA
OWASP_BSB_20120827_TOP10_ISMAELROCHA
 

More from Helder da Rocha

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Helder da Rocha
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosHelder da Rocha
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasHelder da Rocha
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a WebHelder da Rocha
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosHelder da Rocha
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 

More from Helder da Rocha (20)

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativos
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemas
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a Web
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativos
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 

JSR 375 Segurança em Java EE 8

  • 2. Objetivos Discutir os problemas que existem na API padrão de segurança do Java EE atual Apresentar as idéias que estão sendo discutidas sobre o JSR-375: API de Segurança do Java EE 8
  • 3. Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte Java & Web desde 1995 Autor de cursos e livros
 + de 2500 alunos 
 + de 8000 horas de aula helderdarocha.com.br
  • 4. A API padrão de segurança do 
 Java EE 
 é muito complexa?
  • 5. Java EE 8 Community Survey O que deve ser priorizado? Fonte: Java EE 8 Community Survey
  • 6. Java EE 8 Community Survey O que deve ser priorizado? 2˚ Fonte: Java EE 8 Community Survey
  • 7. Java EE 8 Community Survey O que deve ser priorizado? 2˚ Security Simplification 11.1% Fonte: Java EE 8 Community Survey
  • 8. Quais são os problemas? • É complexa, confusa, difícil de usar • Redundância desnecessária • Volta aos tempos do J2EE • Precisa ser modernizada • Não suporta OpenID Connect, OAuth, etc • Difícil de usar na nuvem e PaaS
  • 9. Como mapear usuários no
 Tutorial Java EE 7 Glass
 fish É possível implementar uma solução completa de segurança em Java EE que não dependa de APIs ou configurações proprietárias ou frameworks de terceiros?
  • 10. Quais são os problemas? • É complexa, confusa, difícil de usar • Redundância desnecessária • Volta aos tempos do J2EE • Precisa ser modernizada • Não suporta OpenID Connect, OAuth, etc • Difícil de usar na nuvem e PaaS • Não existe API padrão Java EE para segurança! • Vendor lock-in com solução do fabricante • Desenvolvedores abandonam Java EE em busca de soluções de terceiros (Spring, Shiro, etc.)
  • 11. Problemas da segurança Java EE • Necessidade de usar configurações proprietárias • Em ambiente de nuvem/PaaS é problema: desenvolvedores não tem acesso a recursos proprietários - não se adapta ao paradigma do desenvolvedor de apps para a nuvem • API não é portável, é confusa, antiquada • Desenvolvedores migram para frameworks de terceiros já que o padrão não existe
  • 12. Wild Fly Segurança padrão no Java EE • Vendor lock-in: escolha a sua prisão Web
 Sphere Glass
 fish ?
  • 13. Autenticação
 e Autorização Policy / Security Manager
 JAAS
 JarSigner TSA/TSP (RFC 3161) Comunicação
 Segura JSSE (SSL/TLS) SASL (RFC 2222) GSS-API (RFC 2853) Criptografia JCA JCE Java XML DSig (JSR 105) Infraestrutura de Chave Pública (PKI) X.509, CRLs e CertPath API OCSP (RFC 2560) PKCS#11 "Sandbox" da JVM Classloader
 Garbage collection
 Bytecode verification
 Data-typing Segurança nativa da
 Plataforma Java + Mecanismos de segurança Java SE 8
  • 14. Mensagem Mensagem Role Principal Role userid pass / cert CamadadeAplicações CamadadeAplicações Camada de Transportes Autenticação Mensagem Conexão
 Segura SSL/TLS Conexão
 Insegura Autorização Operações e Recursos APIs programáticas: autenticação (JASPIC) e autorização (JACC + contextos de segurança de cada tipo de componente) APIs declarativas: autorização, config de autenticação HTTP (JAAS) e config de transporte SSL/TLS por recurso/método HTTP Mecanismos de segurança Java EE 7
  • 15. ?
  • 16. O que falta em Java EE? • Ter uma API padrão de segurança moderna, unificada e independente de fabricante • Segurança Java EE hoje, na prática, usa recursos proprietários ou frameworks de terceiros (Spring, etc.) • O que mais? • Terminologia comum (callers/users, groups/roles, identity store) • Contexto de segurança acessível de qualquer componente • Mecanismo de autenticação mais flexível , independente de servidor e com implementações padrão • APIs padronizadas para identity stores (não depender de realms proprietários) • Formas de controlar acesso além de roles (regras, interceptadores) • Como será o futuro da segurança em Java EE?
  • 18. O que fazer • Resolver problemas de portabilidade • Facilitar a vida do desenvolvedor • Usar defaults e não precisar XML • Configuração independente de servidor • Modernizar • Atender demandas atuais de segurança • Inspiração em frameworks existentes OmniSecurity + ...
  • 19. Objetivos da JSR-375 "The goal of this JSR is to improve the Java EE platform by ensuring the Security API aspect is useful in the modern cloud/PaaS application paradigm." "This promotes self-contained application portability across all Java EE servers, and promotes use of modern programming concepts such as expression language, and contexts and dependency injection." "This JSR will holistically attempt to simplify, standardize, and modernize the Security API across the platform in areas identified by the community via survey results and submitted JIRA issues."
  • 20. JSR 375 - Linha do tempo Q3 2014 Expert Group formed NÓS ESTAMOS AQUI (Jul/2015) Q4 2015 Early Draft Q1 2016 Public Review Q3 2016 Proposed Final Draft H1 2017 Final Release
  • 21. • Baseadas nos resultados finais do Java EE 8 Community Survey • Password aliases Quais as prioridades? Fonte: Java EE 8 Community Survey
  • 22. • Baseadas nos resultados finais do Java EE 8 Community Survey • Password aliases • API de Autenticação (simplificação do JASPIC) Quais as prioridades? Fonte: Java EE 8 Community Survey
  • 23. • Baseadas nos resultados finais do Java EE 8 Community Survey • Password aliases • API de autenticação (simplificação do JASPIC) • API para atribuir roles e permissões Quais as prioridades? Fonte: Java EE 8 Community Survey
  • 24. Fonte: Java EE 8 Community Survey Quais as prioridades? • Baseadas nos resultados finais do Java EE 8 Community Survey • Password aliases • API de autenticação (simplificação do JASPIC) • API para atribuir roles e permissões • Interceptadores de autorização
  • 25. Quais as prioridades? • Baseadas nos resultados finais do Java EE 8 Community Survey • Password aliases • API de autenticação (simplificação do JASPIC) • API para atribuir roles e permissões • Interceptadores de autorização • API para Identity Store Fonte: Java EE 8 Community Survey
  • 26. Quais as prioridades? • Resultados finais do Java EE 8 Community Survey • Password aliases • API de autenticação (simplificação do JASPIC) • API para atribuir roles e permissões • Interceptadores de autorização • API para Identity Store • + Simplificar a API • Introduzir um contexto de segurança unificado • Unificar a terminologia
  • 27. Principais idéias do JSR 375 • Terminologia unificada • API de autenticação • API de identity store • API de password aliasing • API de atribuição de roles e permissões • API de interceptadores de autorização • API de contexto de segurança Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 28. Relacionamentos entre as propostas Identity Store Mecanismo de Autenticação Contexto de Segurança Atribuição de Permissões / Roles Interceptadores de Autorização Aliasing de Senhas Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 31. Terminologia • Como se chama a entidade que se autentica? get????Principal() get????InRole()
  • 32. Terminologia • Como se chama a entidade que se autentica? getUserPrincipal() getUserInRole()
  • 33. Terminologia • Como se chama a entidade que se autentica? getCallerPrincipal() getCallerInRole()
  • 34. Terminologia • O que é um grupo? Conjunto de usuários? Uma permissão? ??????
  • 35. Discussão sobre terminologia • Epic (JIRA) sobre terminologia da API • https://java.net/jira/browse/JAVAEE_SECURITY_SPEC-21 • + em SPECs 1, 2, 3 e 28 • Nas discussões a preferência tem sido maior para "Caller" em vez de "User" para usuário logado (SPEC-2) Fonte: https://java.net/jira/browse/JAVAEE_SECURITY_SPEC-2
  • 36. Terminologia • Como se chama a coisa que guarda identidades? zone domain region security provider login module identity manager provider authenticator identity provider auth store repository identity store realm authentication repository auth provider
  • 38. Mecanismo de autenticação • Situação: desenvolvedor tem uma aplicação que • Gerencia seus próprios usuários e grupos • Precisa autenticar usuários para atribuir roles • Quer autenticar usando modelos do domínio da aplicação • Precisa usar método não suportado (ex: OpenID Connect) • Solução simples • Vendor lock-in com o fabricante do servidor de aplicações • Framework de terceiros (Spring, Shiro, etc.) • Solução Java EE: ?
  • 39. Autenticação em Java EE • Java EE oferece duas alternativas (excludentes) de configuração • API declarativa na camada Web para selecionar realm e o método de autenticação (BASIC, FORM, DIGEST, CLIENT) • API programática (JASPIC) para criar módulos de autenticação • A realização da autenticação é dependente de fabricante • Maioria oferece APIs e ferramentas proprietárias baseadas em JAAS JASPIC (JSR 196) javax.security.auth.message JAAS
 java.security.auth HttpServletRequest HttpServletResponse <login-config> <auth-method>
 BASIC
 </auth-method> <realm-name>
 jdbc-realm
 </realm-name> </login-config> web.xml Camada
 Web
  • 40. JAAS Principal != Java EE Principal • O foco é diferente em Java SE e Java EE • Java SE (JAAS): um Subject representa um usuário, que pode ter uma coleção de identidades (Principal) • Java EE: um Principal representa um usuário
 que pode ter uma coleção de permissões (Roles)
  • 41. JASPIC SAM public interface ServerAuthModule { public void initialize(...) throws AuthException; public AuthStatus validateRequest(...); public Class<?>[] getSupportedMessageTypes(); public AuthStatus secureResponse(...); public void cleanSubject(...); }
  • 42. JASPIC javax.security.auth.message.module
 ServerAuthModule javax.servlet
 ServletContextListener javax.security.auth.message.config
 AuthConfigFactory javax.security.auth.message.config
 AuthConfigProvider contextInitialized() javax.security.auth.message.config
 ServerAuthConfig javax.security.auth.message.config
 ServerAuthContext «create» «create» «create»«create»javax.security.auth.message.callback
 CallbackHandler javax.security.auth.message.callback
 CallerPrincipalCallback javax.security.auth.message.callback
 GroupPrincipalCallback validateRequest() handle() Web Container authenticate Auth Service JSR 196 «create» «create» initialize() validateRequest() registerConfigProvider() «create» HTTP
 request Register Principal and Groups * * * * * * * Must create implementations of these classes/interfaces
  • 43. Proposta JSR-375: JASPIC • Por que ninguém usa JASPIC? • Complexo! Tem que programar 6 classes • Ideia: reduzir 5 classes a uma (SAM) • Registrar no ServletContextListener e/ou anotações @Authenticator("org.acme.TokenAuthModule") @WebServlet("/SimpleServlet") @ServletSecurity(@HttpConstraint(rolesAllowed = {"manager"})) public class SimpleServlet extends HttpServlet { • Em vez de implementar toda a interface, usar um Profile • ex: MySAM extends HttpServerAuthModule {} Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 44. Proposta JSR-375: JASPIC • Fornecer autenticadores padrão • Lançar eventos CDI • @PreAuthenticate, @PostAuthenticate
 @PreLogout, @PostLogout • Para contar usuários logados, • Rastrear tentativas de login mal-sucedidas • Criar usuário local depois de autenticação remota • Preferências do usuário, etc. @Authenticator("javax.security.authenticator.OpenIDConnect") @WebServlet("/SimpleServlet") @ServletSecurity(@HttpConstraint(rolesAllowed = {"manager"})) public class SimpleServlet extends HttpServlet { Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 46. Gerência de usuários: hoje • Atualmente não existe suporte padrão para gerenciar usuários em Java EE • Aplicações não tem como criar, remover, atualizar e agrupar usuários em Java EE • Dependência de soluções 
 proprietárias (vendor-lock-in), 
 frameworks de terceiros 
 ou soluções in-house Realm
  • 47. Proposta JSR-375: Identity Store • Serviço padrão para criar, atualizar, remover, e agrupar usuários • Usa um recurso de usuários • Escopo pode ser limitado à aplicação e/ou compartilhado por outras aplicações • LDAP, arquivos, datasource, embedded, servidor • Poder ser ntercambiável: recurso diferente para desenvolvimento, teste, produção • API poderia informar quais os serviços disponíveis em determinado recurso de usuários.
  • 48. Primeiro esboço: API de Identity Store public interface IdentityStore { Identity loadIdentityByName(String name); void changePassword(char[] oldPassword, char[] newPassword); void createIdentity(Identity user); void deleteIdentity(String name); void updateIdentity(Identity identity); boolean identityExists(String name); void createGroup(String group); void deleteGroup(String group); void addIdentityToGroup(String name, String group); void removeIdentityFromGroup(String name, String group); boolean isIdentityInGroup(String name, String group); List<String> getIdentityGroups(String name); } public interface Identity { String getUsername(); char[] getPassword(); boolean isAccountExpired(); boolean isAccountLocked(); boolean isPasswordExpired(); boolean isEnabled(); IdentityAttributeValue getAttribute(String name); } Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 49. Proposta + recente para Identity Store public interface IdentityStore { // Callers and Groups Caller loadCaller(String loginName); boolean callerExists(String loginName); List<Caller> getCallers(String regEx); boolean groupExists(String name); List<String> getGroups(String regEx); boolean isCallerInGroup(String callerLoginName, String groupName); List<Caller> getCallersInGroup(String group); List<String> getCallerGroups(String callerLoginName); List<String> getCallerGroups(Caller caller); // Credentials CredentialValidationResult validateCredentials(Credentials credentials); // Role Mapping boolean roleExists(String name); enum RoleSetSelector {ALL, ASSIGNED, UNASSIGNED} List<String> getRoles(String regEx, RoleSetSelector roleSet); // Roles mapped to Caller // boolean callerHasRole(String loginName, String role); boolean callerHasRole(Caller caller, String role); List<Caller> getCallersWithRole(String role); List<String> getRolesForCaller(String loginName); List<String> getRolesForCaller(Caller caller); // Roles mapped to Group // boolean groupHasRole(String groupName, String role); List<String> getGroupsWithRole(String role); List<String> getRolesForGroup(String groupName); } public class Caller { private String loginName; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } } Fonte: 
 https://github.com/javaee-security-spec/javaee-security-proposals
 Jun 08 2015 Baseada em PicketLink (picketlink.org)
  • 50. Identity Store: implementação Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015 Identity IdentityStore LDAP BD Arquivo Servidor Embedded
  • 51. Identity store: idéias de como usar • Como embutir um Identity Store na própria aplicação @EmbeddedIdentityStore(name="java:app/devIdentityStore",
 {
 @Identity(username="ray", password="secret", groups="admin"),
 @Identity(username="jo", password="secret", groups="user"),
 @Identity(username="sam", password="secret", groups="user")
 }) • Identity Store em banco de dados relacional @DatabaseIdentityStore(
 name="java:app/testIdentityStore",
 lookup="somedatabase",
 userQuery="SELECT passwd FROM principals WHERE userid=?",
 groupQuery="SELECT group FROM groups where username=?", ...) Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 53. Password Aliasing • Atualmente não há suporte padrão para referenciar e guardar uma senha (para acessar recursos) de forma segura em Java EE • Aplicações precisam de uma senha assim, por exemplo, para acessar recursos de bancos de dados, em um persistence.xml • Soluções são in-house ou usando ferramentas de terceiros
  • 54. Proposta JSR-375: Password Aliasing • Sintaxe padrão para indicar um alias de senha, e um meio para resolver o alias para um valor de senha • Repositório seguro que poderia ser mantido com a aplicação <data-source> <name>java:app/env/testDS</name> <user>APP</user> <password>${ALIAS=token}</password> ... </data-source> @DataSourceDefinition( name="java:app/jdbc/test", user="root", password="${ALIAS=token}", ...) Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015 ${ALIAS=a#6W@+2&3_} "senha"
  • 56. java.security
 Permission Autorização em Java EE JACC (JSR 115) • Baseada em roles, fácil de usar e 100% Java EE* • Configuração declarativa via anotações e deployment descriptor XML, ou através de API programática (JACC) • Acesso (leitura) através APIs programáticas em contextos de segurança <method-permission> <role-name>...</role-name> <method> <ejb-name>...</ejb-name> <method-name>...</method-name> </method> </method-permission> <security-constraint> <web-resource-collection> ... </web-resource-collection>
 <auth-constraint> <role-name>...</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>...</transport-guarantee> </user-data-constraint> </security-constraint> ejb-jar.xml CamadaEJB * depois de mapeados grupos/usuários a roles javax.security.jacc
 EJBMethodPermission javax.security.jacc
 WebResourcePermission javax.security.jacc
 WebUserDataPermission javax.security.jacc
 WebRoleRefPermission javax.security.jacc
 EJBRoleRefPermission CamadaWeb web.xml Deployment descriptorsAnotações @ServletSecurity( @HttpConstraint(
 transportGuarantee = ..., rolesAllowed = {...} ) ) public class MyServlet... {...} @RolesAllowed({...}) public class Bean {...
 @DenyAll 
 public void m1() {}
 @PermitAll 
 public void m2() {}
  • 57. Role Mapping em Java EE • Atualmente não há suporte padrão a mapeamento de roles em Java EE • Soluções implicam em vendor lock-in ou uso de APIs de terceiros <glassfish-web-app> <context-root>JavaEESecurity</context-root> <security-role-mapping> <role-name>administrador</role-name> <principal-name>cerebro</principal-name> <group-name>alienigenas</group-name> </security-role-mapping> <security-role-mapping> <role-name>especial</role-name> <principal-name>vini</principal-name> <principal-name>masha</principal-name> </security-role-mapping> <security-role-mapping> <role-name>amigo</role-name> <principal-name>masha</principal-name> <principal-name>vini</principal-name> <principal-name>niquel</principal-name> </security-role-mapping> <security-role-mapping> <role-name>outro</role-name> <principal-name>kusko</principal-name> </security-role-mapping> </glassfish-web-app>
  • 58. Proposta JSR-375: Role Mapping • Serviço de roles padronizado que permite que a aplicação realize operações de mapeamento de roles • granting, pesquisa, para roles de usuários e grupos • Serviço manipularia mapeamentos de um role mapper (pode ser embedded, JDBC, LDAP, etc.) @EmbeddedRoleMapper( users={ @RoleMap(user=“foo”,roles=“admin”), @RoleMap(group=“admin”,roles={“admin”,”manager”}) } ) public class MyServlet { } Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 59. Role Mapper dinâmico public interface RoleMapper { void grantRoleToUser(String username, String role); void revokeRoleFromUser(String username, String role); boolean hasRoleForUser(String username, String role, boolean includeGroups); List<String> getRolesForUser(String username, boolean includeGroups); List<String> getUsersWithRole(String role, boolean includeGroups); void grantRoleToGroup(String group, String role); void revokeRoleFromGroup(String group, String role); boolean hasRoleForGroup(String group, String role); List<String> getRolesForGroup(String group); List<String> getGroupsWithRole(String role); } @Inject RoleMapper roleMapper; roleMapper.grantRoleToGroup("Manager", "EDIT_ACCOUNTS"); boolean has = roleMapper.hasRoleForGroup("Manager", "CLOSE_ACCT"); List<String> roles = roleMapper.getRolesForGroup("Manager"); List<String> groups = roleMapper.getGroupsWithRole("VIEW_ACCOUNTS"); Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 60. Limitações da autorização • Atualmente Java EE apenas suporta autorização por permissões (roles) • Não há suporte padrão para incluir regras do domínio da aplicação na decisão de autorização • Soluções são in-house ou proprietárias
  • 61. Proposta JSR-375: interceptadores • Anotação padrão de interceptador para métodos, capaz de incluir regras que seriam usadas na autorização • Seria chamada se forma similar a @AroundInvoke • As regras teriam acesso ao contexto atual • Regras poderiam ser baseadas em texto (como Java EL) • Suporte a eventos CDI como parte do processo de decisão @LdapAuthorizationRules ( name="java:app/accountAuthRules", ldapUrl="ldap://blah", ldapUser="ElDap", ldapPassword=“mysecret” )
 public class MyBean { 
 @ EvaluateSecured(ruleSourceName="java:app/accountAuthRules", 
 rule="transferFunds")
 void transferFunds() {..}; } Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 63. Como obter principals e testar roles javax.servlet.http.
 HttpServletRequest getUserPrincipal() isUserInRole() WebServlets,
 Facelets, WebFilters javax.faces.context.
 ExternalContext getUserPrincipal() isUserInRole() JSF backing beans javax.ejb.
 EJBContext getCallerPrincipal() isCallerInRole() EJBs javax.websocket.
 Session getUserPrincipal() WebSockets javax.ws.rs.core.
 SecurityContext getUserPrincipal() isUserInRole() RESTful Web Services javax.xml.ws.
 WebServiceContext getUserPrincipal() isUserInRole() SOAP Web Services em Java EE 7 CDI @Inject 
 java.security.Principal
  • 64. Proposta JSR-375: 
 contexto de segurança • Deveria haver apenas um contexto de segurança que pudesse ser obtido por qualquer componente Java EE public class MyFutureCdiBean { @Inject private SecurityContext securityContext; public String sayHello() { if (securityContext.isUserInRole("admin")) { return "Hello World!"; } throw new SecurityException("User is unauthorized."); } } Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 65. Exemplo (idéia) public interface SecurityContext { String getUserPrincipal(); boolean isUserInRole(String role); List<String> getAllUsersRoles(); boolean isAuthenticated(); boolean isUserInAnyRole(List<String> roles); boolean isUserInAllRoles(List<String> roles); void login(Object request, Object response); void login(Map map); void logout(); void runAs(String role); boolean hasAccessToResource(); boolean hasAccessToBeanMethod(); } Fonte: Palestra de Alex Kowolski Finally, Security API JSR 375
 Devoxx France Apr 08 2015
  • 66. Conclusões • Java EE não tem uma API de segurança padrão independente de plataforma, moderna e fácil de usar • Java EE 8 pode ser que tenha - essa é a meta do JSR-375 • Se você tem interesse, envolva-se! • Como se envolver • Página do projeto: 
 https://java.net/projects/javaee-security-spec • Lista de discussões:
 users@javaee-security-spec.java.net • Playground no GitHub (faça fork e explore):
 https://github.com/javaee-security-spec/javaee-security-proposals
  • 67. Referências • Página da JSR-375 • https://www.jcp.org/en/jsr/detail?id=375 • Discussões do JIRA do JSR-375 e listas de e-mail • https://java.net/jira/browse/JAVAEE_SECURITY_SPEC • https://java.net/projects/javaee-security-spec/lists • Artigos de Arjan Tijms sobre JASPIC e JAAC • arjan-tijms.omnifaces.org • Palestra do spec lead Alex Kosowski no DevoXX France (Abril 2015)