Substituindo o Subject RunAs no Encadeamento para JAAS
Para estender a função fornecida pelas APIs (Interfaces de Programação de Aplicativos) JAAS (Java™ Authentication and Authorization Service), é possível configurar o assunto RunAs ou o assunto de chamada com uma entrada válida diferente que é utilizada para pedidos de saída nesse encadeamento em execução.
Antes de Iniciar
- permission javax.security.auth.AuthPermission "wssecurity.getRunAsSubject"
- permission javax.security.auth.AuthPermission "wssecurity.getCallerSubject"
- permission javax.security.auth.AuthPermission "wssecurity.setRunAsSubject"
Sobre Esta Tarefa
Esta extensão oferece a flexibilidade de associar o Assunto a todas as chamadas remotas neste encadeamento, caso você utilize um método WSSubject.doAs para associar o assunto à ação remota.
Um desenvolvedor de aplicativos pode usar o
método WSSubject.doAs para estabelecer um assunto JAAS que é autenticado por
um módulo de login do JAAS como a identidade de segurança ativa para o tempo de execução do WebSphere Application
Server a ser utilizado ao desempenhar uma ação especificada. O WSSubject.doAs somente sincroniza
a identidade do encadeamento quando é chamado dentro de um componente que esteja configurado para sincronizar para encadeamento. Quando utilizada com a opção Sincronização Permitida
para Encadeamento de S.O. do aplicativo, esta identidade é definida no encadeamento do
sistema operacional para o escopo dessa ação.
Procedimento
Exemplo
try { javax.security.auth.Subject runas_subject, caller_subject; runas_subject = com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); caller_subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject(); // definir um novo assunto RunAs para o encadeamento, substituindo aquele definido declarativamente com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(caller_subject); // fazer algumas chamadas remotas // restaurar para o runAsSubject anterior com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(runas_subject); } catch (WSSecurityException e) { // registrar erro } catch (Exception e) { // registrar erro }