Como proteger os webservices no GlassFish 2?

Temos alguns EJBs (EJB3) sem núcleo implantados em um servidor GlassFish 2 que expõem alguns de seus methods como webservices por meio da anotação @Webmethod.

Agora, queremos proteger esses methods de serviço da Web para que apenas clientes autenticados possam chamá-lo. Qual seria uma boa maneira de conseguir isso?

Como o bom reverendo disse. Exemplo abaixo usa um domínio de arquivo para autenticação.

@Stateless @WebService(name = "MyAppServices") @RolesAllowed({"user"}) public class ItemEJB { ... } 

Você também precisará do sun-ejb-jar.xml, por exemplo

    user  user    ItemEJB   MyAppServices  BASIC file     

A criação de um grupo no reino de arquivos no glassfish é trivial (console de administração). você pode no entanto criar seu próprio reino personalizado e módulo de login

Você pode autorizar uma lista de funções para acessar um método ou um bean inteiro usando annotations de segurança:

Por exemplo

 @Stateless @RolesAllowed({"user", "employee", "admin"}) public class ItemEJB { ... } 

Veja o link abaixo para mais informações:

http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/

Agora, queremos proteger esses methods de serviço da Web para que apenas clientes autenticados possam chamá-lo.

Eu suponho que isso não está relacionado ao SSL. Assim:
1) O cliente efetua login dando nome de usuário e senha
2) Se o nome de usuário e senha estiverem corretos (armazenados no database), o usuário é considerado logado e, na resposta, um token de session exclusivo (de alguma forma relacionado ao nome de usuário e senha) é gerado pelo serviço da Web e enviado de volta resposta.
Este token é armazenado junto com informações de data e hora, nome de usuário e senha.
3) Cada vez que um pedido é enviado pelo cliente, o token é enviado de volta junto com os outros parâmetros. Se o token for válido, isso significa que a solicitação vem de um cliente autenticado.
4) Todas as solicitações devem ter o token de session com o restante dos parâmetros.
Portanto, um cliente não autenticado não terá token para enviar.

    Intereting Posts