INTRODUÇÃO JAVA
  AUTHENTICATION AND
AUTHORIZATION SERVICE
             Bruno Taboada
                29/11/2010
O que é JaaS?
•   É um framework.
•   Altamente plugável.
•   Disponível desde v1.4.
•   Flexível.
•   Integrado a arquitetura de segurança da
    plataforma.
Java Security Overview
JaaS Anatomia
Terminologia
•   Realm
•   Groups
•   User
•   Role (Chave de uma porta)
•   Principal (Identidade)
•   Subject
•   Credential
Flexibilidade Jaas


       Subject   EmpregadoPrincipal   Permissão 1



                                      Permissão 2



      Subject     GerentePrincipal    Permissão 3
Adicionando as roles (JBoss AS 5.0.1).


                           RoleEmpregado
                              Principal


                            RoleGerentePri
       Subject   Group
                                ncipal


                            RoleAdministra
                             dorPrincipal
Exemplo Policy File
1.   grant codebase "file:./SampleAction.jar", Principal
2.   sample.principal.SamplePrincipal “nomeDoPrincipal" {
3.      permission java.util.PropertyPermission "java.home", "read";
4.      permission java.util.PropertyPermission "user.home", "read";
5.      permission java.io.FilePermission "foo.txt", "read";
6.   };
Plugabilidade LoginModule Jboss AS
1.    <application-policy name = "Exemplo">
2.      <authentication>
3.      <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" =
      "required">
4.         <module-option name = "unauthenticatedIdentity">guest</module-option>
5.         <module-option name = "dsJndiName">java:/MyDataSourceConfig</module-
      option>
6.     <module-option name = "principalsQuery">Select passord from users where userid=?
      </module-option>
7.    <module-option name = "rolesQuery">Select role, 'Roles' from user_roles where
      userid=?</module-option>
8.       </login-module>
9.      </authentication>
10.   </application-policy
Controle de Acesso em EJB
Declarativa Baseada em Anatoções
1.   @DeclareRoles({“ADMINIISTRADOR", “EMPREGADO"})
2.   @Stateless
3.   public class PagamentoBean implements Pagamento{
4.     @Resource SessionContext ctx;

5.     @RolesAllowed(" ADMINIISTRADOR ")
6.     public void reviewEmpregadoInfo(EmplInfo info) {
7.        oldInfo = ... Ler banco de dados;
8.     }

9.    @RolesAllowed(" EMPREGADO ")
10.   public void updateEmpregadoInfo(EmplInfo info) {
11.     newInfo = ... update database;
12.   }
13. }
Controle de Acesso em Servlet
Declarativa baseada em arquivo

1.    <security-constraint>
2.     <web-resource-collection>
3.     <web-resource-name>Control Access</web-resource-name>
4.    <http-method>PUT</http-method>
5.    <http-method>DELETE</http-method>
6.    <http-method>GET</http-method>
7.    <http-method>POST</http-method>
8.     <url-pattern>/ServletSample.do</url-pattern>
9.     </web-resource-collection>
10.    <auth-constraint>
11.      <role-name>ADMINISTRADOR</role-name>
12.    </auth-constraint>
13.   </security-constraint>
14.   <security-role>
15.  <role-name>ADMINISTRADOR</role-name>
16. </security-role>
Controle de Acesso em Servlet
      Programática
1.    @WebServlet(name="AccessControlSample", urlPatterns={"/ServletSample.do"})
2.    public class TutorialServlet extends HttpServlet {
3.    protected void processRequest(HttpServletRequest request,HttpServletResponse
      response) throws ServletException, IOException {
4.        response.setContentType("text/html;charset=UTF-8");
5.        PrintWriter out = response.getWriter();
6.        try {
7.           if(request.isUserInRole("ADMINISTRADOR")){
8.             out.println("I´m Administrator");
9.           }else{
10.            throw ApplicationExcetionDenied("Access Denied");
11.          }
12.       } catch (Exception e) {
13.          throw new ServletException(e);
14.       } finally {
15.          out.close();
16.       }
17.     }
18.   }
Referências
• Java EE 6 Tutorial
• All that JAAS in Java World
  (http://www.javaworld.com/javaworld/jw-09-2002/jw-0913-
  jaas.html?page=2)
• Jboss AS 4 R5 Documentação
  (http://docs.jboss.org/jbossas/jboss4guide/r5/html/)
• JAVA SE 6 Specification (http://www.jcp.org/en/jsr/detail?id=316)
• Java 6 Security Guide
  (http://download.oracle.com/javase/6/docs/technotes/guides/se
  curity/)
• http://www.jaasbook.com/
Na internet sobre jaas
• Algumas Opiniões encontradas na internet.(GUJ)
• “JAAS é legal por que por ser padrão, mas será que
  não da para ser mais maleável? ”
• “O JAAS é assim mesmo, rígido, inflexível,
  configurableableable, etc... ”
• “O jaas é um pouco limitado e cheio de restrições ”

          • Eu também quero dar a minha.
Conclusão

•   Robusto.
•   Plataforma Built-in.
•   Flexível.
•   Complexidade de implementação média.
•   Possui especificação elaborada por grandes
    especialista no assunto.

Jaas apresentado

  • 1.
    INTRODUÇÃO JAVA AUTHENTICATION AND AUTHORIZATION SERVICE Bruno Taboada 29/11/2010
  • 2.
    O que éJaaS? • É um framework. • Altamente plugável. • Disponível desde v1.4. • Flexível. • Integrado a arquitetura de segurança da plataforma.
  • 3.
  • 4.
  • 5.
    Terminologia • Realm • Groups • User • Role (Chave de uma porta) • Principal (Identidade) • Subject • Credential
  • 6.
    Flexibilidade Jaas Subject EmpregadoPrincipal Permissão 1 Permissão 2 Subject GerentePrincipal Permissão 3
  • 7.
    Adicionando as roles(JBoss AS 5.0.1). RoleEmpregado Principal RoleGerentePri Subject Group ncipal RoleAdministra dorPrincipal
  • 8.
    Exemplo Policy File 1. grant codebase "file:./SampleAction.jar", Principal 2. sample.principal.SamplePrincipal “nomeDoPrincipal" { 3. permission java.util.PropertyPermission "java.home", "read"; 4. permission java.util.PropertyPermission "user.home", "read"; 5. permission java.io.FilePermission "foo.txt", "read"; 6. };
  • 9.
    Plugabilidade LoginModule JbossAS 1. <application-policy name = "Exemplo"> 2. <authentication> 3. <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" = "required"> 4. <module-option name = "unauthenticatedIdentity">guest</module-option> 5. <module-option name = "dsJndiName">java:/MyDataSourceConfig</module- option> 6. <module-option name = "principalsQuery">Select passord from users where userid=? </module-option> 7. <module-option name = "rolesQuery">Select role, 'Roles' from user_roles where userid=?</module-option> 8. </login-module> 9. </authentication> 10. </application-policy
  • 10.
    Controle de Acessoem EJB Declarativa Baseada em Anatoções 1. @DeclareRoles({“ADMINIISTRADOR", “EMPREGADO"}) 2. @Stateless 3. public class PagamentoBean implements Pagamento{ 4. @Resource SessionContext ctx; 5. @RolesAllowed(" ADMINIISTRADOR ") 6. public void reviewEmpregadoInfo(EmplInfo info) { 7. oldInfo = ... Ler banco de dados; 8. } 9. @RolesAllowed(" EMPREGADO ") 10. public void updateEmpregadoInfo(EmplInfo info) { 11. newInfo = ... update database; 12. } 13. }
  • 11.
    Controle de Acessoem Servlet Declarativa baseada em arquivo 1. <security-constraint> 2. <web-resource-collection> 3. <web-resource-name>Control Access</web-resource-name> 4. <http-method>PUT</http-method> 5. <http-method>DELETE</http-method> 6. <http-method>GET</http-method> 7. <http-method>POST</http-method> 8. <url-pattern>/ServletSample.do</url-pattern> 9. </web-resource-collection> 10. <auth-constraint> 11. <role-name>ADMINISTRADOR</role-name> 12. </auth-constraint> 13. </security-constraint> 14. <security-role> 15. <role-name>ADMINISTRADOR</role-name> 16. </security-role>
  • 12.
    Controle de Acessoem Servlet Programática 1. @WebServlet(name="AccessControlSample", urlPatterns={"/ServletSample.do"}) 2. public class TutorialServlet extends HttpServlet { 3. protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 4. response.setContentType("text/html;charset=UTF-8"); 5. PrintWriter out = response.getWriter(); 6. try { 7. if(request.isUserInRole("ADMINISTRADOR")){ 8. out.println("I´m Administrator"); 9. }else{ 10. throw ApplicationExcetionDenied("Access Denied"); 11. } 12. } catch (Exception e) { 13. throw new ServletException(e); 14. } finally { 15. out.close(); 16. } 17. } 18. }
  • 13.
    Referências • Java EE6 Tutorial • All that JAAS in Java World (http://www.javaworld.com/javaworld/jw-09-2002/jw-0913- jaas.html?page=2) • Jboss AS 4 R5 Documentação (http://docs.jboss.org/jbossas/jboss4guide/r5/html/) • JAVA SE 6 Specification (http://www.jcp.org/en/jsr/detail?id=316) • Java 6 Security Guide (http://download.oracle.com/javase/6/docs/technotes/guides/se curity/) • http://www.jaasbook.com/
  • 14.
    Na internet sobrejaas • Algumas Opiniões encontradas na internet.(GUJ) • “JAAS é legal por que por ser padrão, mas será que não da para ser mais maleável? ” • “O JAAS é assim mesmo, rígido, inflexível, configurableableable, etc... ” • “O jaas é um pouco limitado e cheio de restrições ” • Eu também quero dar a minha.
  • 15.
    Conclusão • Robusto. • Plataforma Built-in. • Flexível. • Complexidade de implementação média. • Possui especificação elaborada por grandes especialista no assunto.

Notas do Editor

  • #2 Este modelo pode ser usado como arquivo de partida para apresentar materiais de treinamento em um cenário em grupo. Seções Clique com o botão direito em um slide para adicionar seções. Seções podem ajudar a organizar slides ou a facilitar a colaboração entre vários autores. Anotações Use a seção Anotações para anotações da apresentação ou para fornecer detalhes adicionais ao público. Exiba essas anotações no Modo de Exibição de Apresentação durante a sua apresentação. Considere o tamanho da fonte (importante para acessibilidade, visibilidade, gravação em vídeo e produção online) Cores coordenadas Preste atenção especial aos gráficos, tabelas e caixas de texto. Leve em consideração que os participantes irão imprimir em preto-e-branco ou escala de cinza. Execute uma impressão de teste para ter certeza de que as suas cores irão funcionar quando forem impressas em preto-e-branco puros e escala de cinza. Elementos gráficos, tabelas e gráficos Mantenha a simplicidade: se possível, use estilos e cores consistentes e não confusos. Rotule todos os gráficos e tabelas.
  • #3 Forneça uma breve visão geral da apresentação. Descreva o foco principal da apresentação e por que ela é importante. Introduza cada um dos principais tópicos. Para fornecer um roteiro para o público, você pode repita este slide de Visão Geral por toda a apresentação, realçando o tópico específico que você discutirá em seguida.