Projeto de Sistemas de Objetos Distribuídos

1.o semestre / 2002

Charlie Nakagawa
Gustavo Castilhos

Proposta de Projeto

Implementação de Interceptadores CORBA para autenticaçao e controle de acesso a objetos CORBA implementados em Java com a JDK 1.4. Utilizaçao dos mecanismos de segurança de Java para implementar a autenticaçao.

Introdução

Interceptadores portáteis são códigos de programa que atuam ao nível das mensagens entre o sistema cliente e o servante, ou ao nível das requisições, entre o ORB e o servante. Neste projeto, serão implementados interceptadores de mensagens, visando autenticar através do JAAS - Java Authentication and Authorization Service - o acesso do cliente ao servante. Note-se que qualquer cliente e qualquer servante podem ser utilizados com os interceptadores, pois são códigos independentes das implementações destes outros. Na seção Fazendo funcionar veremos como isso acontece.

A padronização dos interceptadores é relativamente recentes, surgindo com força no CORBA 2.2. Por ser um mecanismo muito flexível, é possível implementar criptografia, monitoramento de mensagens entre outras tarefas, sem interferir no código proprietário de clientes e servantes.

O Java Authentication and Authorization Service era um pacote opcional para o Java 2 SDK - S tandard Edition, agora é parte integrante da versão 1.4 do Java Development Kit. Ele funciona de modo plugável, podendo ser implementado de forma indenpendente do resto do código, com uma filosofia muito parecida com a dos próprios interceptadores: no run-time é que a classe que implementa a segurança é utlizada.

Ferramentas e Ambiente de Desenvolvimento

A versão do JDK 1.4 amadureceu bastante em relação à anterior no que se refere a CORBA. A Sun implementou um novo compilador IDL, que agora pode produzir, separadamente, os >STUBS e arquivos do cliente e o SKELETON e os arquivos do servante. Abaixo, as ferramentas que serão utilizadas no projeto:

O projeto está sendo desenvolvido em ambiente Windows 98, com máquinas Pentium III com, pelo menos, 128 Mb de memória RAM, porém, é possível levá-lo para qualquer ambiente UNIX-like, como o Linux ou Solaris, bastando ter o JDK 1.4 instalado na plataforma escolhida.

Sistema

O sistema em implementação será muito parecido com o esquema abaixo:

Os interceptadores de mensagens (pontos 1 e 2) são executados tanto no lado cliente quanto no lado do servante. Qualquer cliente pode-se utilizar dos interceptadores, assim como qualquer servante, sem acréscimo algum de código para suas implementações originais. Neste projeto não será utilizado o interceptador de requisições (ponto 3).

Na troca de mensagens, o interceptador do cliente envia para o interceptador do servante uma autenticação com usuário e senha, além da chamada para o servante. Se ela for autenticada pelo sistema de autenticação implementado no interceptador, então a chamada continua para o servante, que retornará a resposta requisitada. Caso contrário, o interceptador retorna uma mensagem de erro, indicando que aquele cliente não tem autorização para acessar ao servante em questão, sendo recebida pelo interceptador do lado do cliente, que vai mostrar o erro e sua causa. Note-se que o cliente e o servante, em momento algum, tomam conhecimento desta interação, sendo exclusiva da responsabilidade dos interceptadores de mensagens.

Classes utilizadas e implementadas

As classes utilizadas são:

Fazendo funcionar

Para rodar um simple HelloWorld.java, digitaríamos este comando (no Windows):
ORBD

orbd -ORBInitialPort 1050

Servante

c:\> java HelloServer -ORBInitialPort 1050 

Cliente

c:\> java HelloWorld -ORBInitialPort 1050 

produzindo o clássico

Hello, World!
na máquina cliente. Note que é preciso indicar qual porta o Server Manager ORBD vai estar escutando. Para rodar com os interceptadores:
Servante

c:\> java HelloServer -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ServerInitializer

Cliente

c:\> java HelloWorld -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ClientInitializer

onde a classe interceptor.<Client/Server>Initializer é relativa ao classpath. Novamente, vemos que os interceptadores são colocados em tempo de execução, não modificando o código das implementações, mas o comportamento.

Com a implementação da autenticação, inclusive com o Security Manager, o comando será (para o servante apenas):

c:\> java HelloServer -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ServerInitializer
-Djava.security.manager
-Djava.security.policy==arquivo.policy /* arquivo com a política de segurança */
-Djava.security.auth.login.config==arquivo.config /* arquivo de configuração do login */

Referências Bibliográficas

  1. Tutorial sobre autenticação e segurança - JAAS

    http://java.sun.com/j2se/1.4/docs/guide/security/jaas/tutorials/GeneralAcnOnly.html

  2. Sobre portable interceptors

    http://java.sun.com/j2se/1.4/docs/guide/idl/PI.html

  3. Um livro bem abrangente, utilizado em sala de aula

    Java Programming with CORBA, ed. OMG Press
    Gerald Brose, Andreas Vogel & Keith Duddy