O WebSphere Application
Server suporta o modelo de segurança declarativa do Java™ EE (Java Platform,
Enterprise Edition). É possível definir a política de autenticação e controle de acesso
utilizando o descritor de implementação Java EE. É possível empilhar ainda mais
os módulos de login customizado para customizar o mecanismo de autenticação do WebSphere Application
Server.
Antes de Iniciar
O módulo de login customizado pode desempenhar o mapeamento de proprietários e credenciais, o token de segurança customizado, o processamento customizado de credenciais e manipulação de erros, entre outras possibilidades. Geralmente, não você deve usar o código do aplicativo para executar a função de autenticação. Utilize as técnicas de programação descritas
nesta seção, se for necessário desempenhar a função de autenticação no
código do aplicativo. Utilize a segurança declarativa como uma regra;
utilize as técnicas descritas nesta seção como um último recurso.
Sobre Esta Tarefa
Quando a opção SSO (Conexão Única) do mecanismo LTPA (Lightweight Third-Party Authentication) está ativada, a
sessão de login do cliente Web é rastreada por um cookie de token SSO de LTPA após o login bem-sucedido.
No logout, este token é excluído para terminar a sessão de login,
mas o assunto do lado do servidor não é excluído. Quando você usa o modelo de segurança declarativa, o contêiner de Web do
WebSphere Application Server executa o
gerenciamento de autenticação de cliente e de sessão de login automaticamente. É possível desempenhar a autenticação no código do aplicativo configurando
uma página de login sem uma restrição de segurança do Java EE e direcionando
pedidos do cliente primeiramente para sua página de login. Sua página de login pode usar o modelo de programação JAAS (Java Authentication
and Authorization Service) para desempenhar a autenticação.
Para possibilitar que módulos de login da Web do
WebSphere Application Server gerem
cookies SSO, use as etapas a seguir.
Procedimento
- Crie uma nova configuração JAAS de login do sistema. Para acessar
o painel, clique em Segurança > Segurança Global. Em Java Authentication and Authorization Service,
clique em Logins do sistema.
- Faça manualmente o clone da configuração de login WEB_INBOUND
e forneça a ele um novo alias. Para fazer o clone da configuração de login, clique em Novo,
digite um nome para a configuração, clique em Aplicar e, em seguida, clique em Módulos
de login do JAAS em Propriedades adicionais. Clique em Novo e configure o módulo de login do JAAS. Para obter informações adicionais, consulte Configurações do Módulo de Login para o Java Authentication and Authorization Service. O contêiner da Web do WebSphere
Application Server usa a configuração de login WEB_INBOUND para autenticar os Web clients.
Alterar a configuração de login WEB_INBOUND afeta todos os aplicativos da Web na célula. Você deve criar sua própria configuração de login clonando o conteúdo da configuração de login do WEB_INBOUND.
- Selecione o módulo de login
wsMapDefaultInboundLoginModule e clique em Propriedades
Customizadas. Há dois módulos de login definidos em sua configuração de
login: ltpaLoginModule e wsMapDefaultInboundLoginModule.
- Inclua um cookie de nome da propriedade de login com o valor true.
Os dois módulos de login estão ativados para gerar os cookies SSO do LTPA. Não
inclua a opção de login do cookie para a configuração de login WEB_INBOUND
original.
- Empilhe o LoginModule(s) customizado na nova configuração de login (opcional).
- Utilize sua página para login programático, executando um JAAS
LoginContext.login utilizando a configuração de login definida recentemente.
Após efetuar login com êxito, ltpaLoginModule ou wsMapDefaultInboundLoginModule gera um
cookie de SSO do LTPA em uma autenticação bem sucedida. Exatamente qual LoginModule gera o cookie de SSO depende de vários fatores, incluindo a configuração de autenticação do sistema e a condição de tempo de execução (que está além do escopo desta seção).
- Chame o método modificado WSSubject.setRunAsSubject para incluir o assunto no cache de autenticação. O assunto deve ser um assunto JAAS do WebSphere Application
Server criado por LoginModule. A inclusão do assunto no cache
de autenticação recria um assunto do token de SSO.
- Utilize a página de logout programática para revogar os cookies
SSO, chamando o método revokeSSOCookies a partir da classe WSSecurityHelper.
O termo "cookies" é usado porque o WebSphere Application
Server Versão 5.1.1 e mais recentes suporta(m) um novo token LTPA SSO com um algoritmo de criptografia diferente, mas pode ser configurado para gerar o token LTPA SSO original para compatibilidade com versões anteriores. Observe que o assunto ainda está no cache de autenticação e apenas os cookies SSO são revogados.
Recurso Reprovado: O método revokeSSOCookies(HttpServletRequest,
HttpServletResponse) da classe WSSecurityHelper foi descontinuado.
Use a funcionalidade fornecida pelo método Java Servlet-3.0 logout().
Leia
Métodos de Segurança do Servlet.
depfeat
Exemplo
Use a seguinte amostra de código para executar a autenticação.
Evitar Problemas: Se você configurar a senha para a classe de factory WSCallbackHandlerFactoryset
para obter manipuladores como
null,
como foi feito no exemplo a seguir, permitirá a asserção de identidade
sem uma senha.
gotcha
Suppose you wrote a LoginServlet.java:
Import com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
Import com.ibm.websphere.security.auth.WSSubject;
public Object login(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
PrintWriter out = null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e) {
// Error handling
}
Subject subject = null;
try {
LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
lc.login();
subject = lc.getSubject();
WSSubject.setRunAsSubject(subject);
} catch(Exception e) {
// capture todas as exceções possíveis se desejar ou manipule-as separadamente
out.println("Exception in LoginContext login + Exception = " +
e.getMessage());
throw new ServletException(e.getMessage());
}
O seguinte é o código de amostra para revogar os cookies SSO em um logout de programação:
O LogoutServlet.java:
public void logout(HttpServletRequest req, HttpServletResponse res,
Object retCreds) throws ServletException {
PrintWriter out =null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e) {
// Manipulação de Erros
}
try {
WSSecurityHelper.revokeSSOCookies(req, res);
} catch(Exception e) {
// capture todas as exceções possíveis se desejar ou manipule-as separadamente
out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
throw new ServletException(e);
}
}