Boa noite pessoal,
Estou meio perdido para implementar o controle de acesso de duas aplicacoes que estou desenvolvendo.
Estou desenvolvendo uma aplicacao de Planejamento de Gastos e outra de Execucao de Gastos com as seguintes caracteristicas.
- Os backends sao desenvolvidos usando Webservices (JAX-WS) e EJB3
- Os frontends sao feitos em Delphi, Flex e PHP.
- As duas aplicacoes interagem uma com a outra
- Quero implementar um unico servico de autenticacao para os dois sistemas.
Nao sei como fazer Autenticacao e Autorizacao usando JAAS, de forma que:
- Cada usuario pertence a uma instituicao, entao, por exemplo quando o usuario chamar o metodo
adicionarPagamento(Integer idInstituicao, Pagamento pag){...}
eu preciso verificar se este usuario esta associado a instituicao cujo id foi passado como parametro.
- Nao posso tratar apenas nos frontends pois eles podem ser implementados pelos porprios clientes. Tem que ser tratada no backend.
- Nao sei como inserir no objeto Principal, retornado pelo metodo contexto.getCallerPrincipal a informacao da instituicao do usuario.
Alguem pode me dar uma luz?
Oi Leandro,
Primeiramente desculpe-me por usar seu tópico para uma dúvida minha, ao invés de responder a sua.
Você pode disponibilziar um exemplo de como vc está consumindo o WebService ? Pode ser em qq uma dessas outras linguagens que vc citou(preferencialmente PHP)
Vc está usando as anotações @Webservice e etc ?
Grato
Cara, eu estou usando essas anotações sim, mas os codigos dos frontends eu nao tenho porque eh outra equipe que desenvolve, mas quando a gente estava escolhendo as tecnologias utilizadas a gente se reuniu e fez uns testes com Delphi 2007.
La tinha uma opcao no menu, que não me lembro de cabeca qual era, que eu passava o endereco do wsdl pra ele e ele gerava todos os stubs necessarios, tipo assim, se meu webservice tivesse a seguinte classe:
public class Calculadora {
public double soma(double numA, double numB){...}
public double subtrai(double numA, numB){...}
}
O Delphi gerava uma classe automaticamente mais ou menos assim:
type
TCalculadora = class
function soma(numA, numB: real): real;
function subtrai(numA, numB: real): real;
end;
implementation
function soma(numA, numB: real): real;
begin
//Chama o webservice
end;
function subtrai(numA, numB: real): real;
begin
//Chama o webservice
end;
ja com tudo implementado. So era preciso instanciar o objeto e chamar as functions que ele automaticamente faz a comunicacao com meu webserice. Quanto ao PHP eu nao sei como esta sendo consumido pois eu nao tenho muito contato a galera que desenvolve.
Entendi,
Obrigado leandro.
Não sei se consigo te ajudar mto, mas vamos tentar:
Vc não quer repetir o código dentro dos métodos, é isso?
Caso seja isso, vc pode criar um Interceptor, e declará-lo como sendo da classe, dessa forma ele será executado sempre antes de qualquer método.
O problema dessa abordagem é que obrigaria ao menos um dos parametros de todos seus metodos(e que ele seja sempre o primeiro, ou o segundo, etc) a ser o idInstituição.
Uma outra alternativa seria um método que validasse seu usuário para determinada instituição,e depois disso, devolvesse um token que deveria ser carregado(enviado) em todas as requisições seguintes.
Não sei se é bem o que vc queria, gostaria de poder ajudar mais, mas está além do meu conhecimento.
Abs,
PS